2013-09-17 4 views
0

Я бы хотел переименовать файлы с помощью пакетного скрипта.Пакетное программирование для переименования файлов

Файлы в настоящее время названы так:

pkg_mon_doc_kpps_01.html 
pkg_mon_doc_kpps_10.html 
pkg_mon_doc_kpps_02.html 

И я хотел бы изменить их:

data_1.xls 
data_2.xls 
data_3.xls 

Я сделал пакетный файл, и когда я запускал скрипт, переименование успешно но с предупреждением

Моя партия сценарий:

@echo off 
set count=0 
:: Getting number of files 
for %%x in (folder\*.html) do (set /a count+=1) 

:: Renaming files 
for /l %%a in (1,1,%count%) do (ren folder\*.html data_%%a.xls) 
pause 

Предупреждение

A duplicate file name exists, or the file cannot be found. 
A duplicate file name exists, or the file cannot be found. 
A duplicate file name exists, or the file cannot be found. 
Press any key to continue . . . 

, что случилось? благодаря, прежде чем :)

+1

Вы получаете эти предупреждения, потому что для каждого %% поглощений в % count% пытается переименовать ** все ** файлы .html в папку в данные _ %% a.xls. Итак, когда a = 1, он переименовывает первый html-файл в data_1.xls, а затем отображает ** 2 предупреждения ** при переименовании следующих двух файлов в data_1.xls. На следующем шаге осталось только два файла .html, чтобы он переименовал первый файл data_2.xls и отобразил ** 1 предупреждение ** для следующего. На последнем шаге остается только один .html-файл, поэтому он переименовывает его data_3.xls без предупреждений. В общем, для примера, который вы предоставили, вы должны получить ** 3 предупреждения **. – Ovidiu

ответ

0

вы просите, чтобы переименовать все файлы в папке сразу (ren folder\*.html data_%%a.xls)

так все * .html будут переименовывать в data_1.xls.

вам нужен цикл для переименования файлов по одному.

0

Вы должны объединить петлю:

@echo off 
setlocal 
set "count=0" 
for %%x in (folder\*.html) do (
    set /a "count+=1" 
    call ren "%%x" "data_%%count%%.xls" 
) 
endlocal 
pause 
+0

это не работает с именами файлов, содержащими восклицательные знаки. – Endoro

+0

Теперь он делает, THX для напоминания мне. Я обычно являюсь апологетиком DISABLEDELAYEDEXPANSION. – Thomas

+0

Коррекция: ОК, но теперь это не работает с карьерами ....., это партия. – Endoro

2

попробовать это:

:: Renaming files 
for %%a in (folder\*.html) do (
    set /a count+=1 
    set "fname=%%~a" 
    setlocal enabledelayedexpansion 
    ren "!fname!" data_!count!.xls 
    endlocal 
) 

и решение без delayed expansion:

for /f "tokens=1*delims=:" %%a in ('dir /b /a-d folder\*.html^|findstr /n $') do ren "folder\%%~b" data_%%a.xls 
+0

спасибо Энроро. работа для меня. – flyingbird013

+1

+1, крики, я не заметил вашего второго решения, которое почти идентично тому, что я опубликовал позже. Я удалил свой ответ :) – dbenham

Смежные вопросы