2016-11-14 251 views
1

我想寫一個批處理腳本來遍歷一組文件,其中有一個零填充文件。我在使用set時遇到了問題,因爲它似乎將我迭代中的最後一個數字用作應該使用的值。 以下是我有:帶批處理的Windows批處理文件夾循環

@echo off 
for /L %%r in (1,1,%1) do (
echo %%r 
set "var=00%%r" 
echo %var% 
) 

當5輸入運行此我得到這樣的輸出:

1 
005 
2 
005 
3 
005 
4 
005 
5 
005 

我想它是:

1 
001 
2 
002 
3 
003 
4 
004 
5 
005 

任何對此的幫助會很大。謝謝。

回答

2

您真的應該閱讀關於延遲擴展的主題。當cmd.exe解析內容時,(代碼塊)中的變量只會被評估一次。 1美元從哪裏來?它應該是%1嗎?如果你想要有一個固定長度的數字並且前導零,你應該記住「Set/A」將前導零的數字看作是八進制數。這是一個變通

@echo off 
Setlocal EnableDelayedExpansion 
for /L %%r in (1,1,5) do (
    Set /A var=1000+%%r 
    Call echo Pseudo Call %%var:~-3%% %%r 
    echo Delayed expansion with exclamation mark !var:~-3! %%r 
) 

你看,2種不同的方法來獲得的var

Pseudo Call 001 1 
Delayed expansion with exclamation mark 001 1 
Pseudo Call 002 2 
Delayed expansion with exclamation mark 002 2 
Pseudo Call 003 3 
Delayed expansion with exclamation mark 003 3 
Pseudo Call 004 4 
Delayed expansion with exclamation mark 004 4 
Pseudo Call 005 5 
Delayed expansion with exclamation mark 005 5 
+0

我有脂肪手指的$ 1 。它應該是%1。謝謝你,這個作品很棒。 –

1

實際值你應該寫這樣的:

@echo off 
setlocal enableDelayedExpansion 
for /L %%r in (1,1,5) do (
    echo %%r 
    set "var=00%%r" 
    echo !var! 
) 
pause