2017-05-25 138 views
0

我有幾百個文件,其名稱在結尾處連續指數:條件批量重命名(Windows XP中)

recipes0001.jpg 
recipes0002.jpg 
... 
recipes0283.jpg 

我需要使得指數開始在976(不是1)重命名它們和前導0變成 '1' 時的指標達到1000

recipes0976.jpg 
recipes0977.jpg 
... 
recipes1000.jpg 
recipes1001.jpg 
.... 

我寫了這個批次代碼(從here修正的應答):

@echo off 
setlocal EnableDelayedExpansion 
set i=975 
for %%a in (*.jpg) do (
    set /a i+=1 
    if i lss 1000 ren "%%a" "recipes0!i!.new" 
    if i geq 1000 ren "%%a" "recipes!i!.new" 
) 
ren *.new *.jpg 

看來,代碼總是運行的部分沒有領先0,因爲我不斷得到recipes976.jpg,recipes1001.jpg等我做錯了什麼?

作爲後續問題,可以將兩個if合併爲一個if ... else

回答

1

要比較變量i的值,需要在將它傳遞給if命令時進行擴展。

if !i! lss 1000 (
    ren "%%a" "recipes0!i!.new" 
)^ 
else (
    ren "%%a" "recipes!i!.new" 
) 
+1

爲什麼使用這樣奇怪的語法?爲什麼不按照幫助中的建議('if /?')編寫')else(')? – aschipfl

+0

我寫這樣的唯一原因是個人喜好。這個想法來自在寫入流重定向之前或之後一個命令,我更喜歡在命令之後寫入流重定向,所以我不必通過文本行來看看哪個命令正在被使用,我可能會有一些奇怪的偏好,但它只是一個偏好。 – treintje

+0

我不明白這個'else'語法是如何鏈接到重定向的,但無論如何這都是您的偏好,所以對我來說很好...... ;-) – aschipfl

2

這是我會做這樣的方式:

@echo off 
setlocal EnableDelayedExpansion 
set i=10975 
for %%a in (*.jpg) do (
    set /a i+=1 
    ren "%%a" "recipes!i:~1!.new" 
) 
ren *.new *.jpg 
+0

另一個優雅的解決方案,謝謝。對於那些不知道的人來說,':〜1'部分通過選擇位置爲1或更大的所有元素(第一個元素具有位置0,第二個1等等)來構建原始「10975」字符串的子字符串。 。 – Rokas