2011-06-27 67 views
11

我試圖打印出多個隨機數,但在for循環中使用,它不重置變量。這是我的代碼。在Windows批處理文件中的「for」循環中隨機變量不變

@echo off 


for %%i in (*.txt) do (

set checker=%Random% 
echo %checker% 
echo %%i% >> backupF 

) 


echo Complete 

有5個文本文件,所以我想它打印5張不同的隨機數,但它只是打印相同的隨機數的5倍。任何幫助將不勝感激。謝謝!

+0

上面沒有道理的腳本。變量「隨機」不是由任何設置,因此檢查器始終爲空。另外%% i%也沒有意義..它應該是%%我。如果你對問題的描述稍微好一些,我認爲這可以在沒有使用延遲擴展的情況下工作。 – djangofan

回答

15

我不確定你是否能夠打印一個隨機數。在你的情況下,%checker%應該評估爲一個空字符串,除非你從同一個cmd會話中多次運行你的腳本。

基本上,你的腳本不能按預期工作的原因是因爲循環體中的變量在執行循環之前被分析和評估。當主體執行時,變量已經被評估,並且在所有迭代中使用相同的值。

因此,您需要的是延遲評估,否則稱爲延遲擴展。您需要先啓用它,然後使用特殊的語法。

這裏是你的腳本修改,以便使用延遲擴展:

@echo off 

setlocal EnableDelayedExpansion 

for %%i in (*.txt) do (

set checker=!Random! 
echo !checker! 
echo %%i% >> backupF 

) 

endlocal 

echo Complete 

正如你所看到的,setlocal EnableDelayedExpansion使特殊處理的延遲擴展語法,這是周圍的變量名!!而非%小號。

您仍然可以使用即時擴展(使用%)在何處可以正常工作(基本上,在括號內的命令塊之外)。

+0

非常感謝。我寫了一個Linux shell,我試圖將它轉移到Windows批處理,所以我在語法上稍微落後。不過,我真的很感激。再次感謝! – mike

0

我的系統上我寫的

set checker=Random 

代替

set checker=!Random! 
相關問題