2013-11-15 184 views
0

我需要實現腳本,在循環執行命令和內聯迭代varible那裏在2位數字格式。我無法理解如何正確使用批處理文件中的變量。我做錯了什麼?嵌套在Windows批處理(* .bat)文件

for /l %%h in (0,1,23) do (
SET padded_h1=0%%h 
SET padded_h=%padded_h1:~-2% 

for /l %%m in (0,1,59) do (
    SET padded_min1=0%m% 
    SET padded_min=%padded_min1:~-2% 

    C:\android-sdk-windows\platform-tools\adb -e shell date -s 20131202.%padded_h%%padded_min%00 
    ping 127.0.0.1 -n 2 > nul 
) 

回答

3

在批處理文件變量的基本規則是:每行,或每塊(如果有),被解析並readed當變量與值取代,除非明確要求延遲替代。

這意味着for塊內有變量(命令的%%變量除外)在到達時將所有變量替換爲值,並且每個循環中都沒有變量,只是它的值。

除了啓用延遲擴展並且變量被引用爲!var!代替%VAR%

因此,與它的尊貴當讀取塊,因爲就是你的代碼是通過CMD執行,因爲它已被寫入

for /l %%h in (0,1,23) do (
    SET padded_h1=0%%h 
    SET padded_h= 

    for /l %%m in (0,1,59) do (
     SET padded_min1=0%m% 
     SET padded_min= 

     C:\android-sdk-windows\platform-tools\adb -e shell date -s 20131202.00 
     ping 127.0.0.1 -n 2 > nul 
    ) 
) 

由於變量的替代變量沒有初始值,當塊(從開始到結束括號)被讀取,並且變量被它們的值替換時,你會得到它。

所以,你的代碼應該看起來像

rem Enable delayed expansion 
setlocal enableextensions enabledelayedexpansion 

for /l %%h in (0,1,23) do (
    rem %%h is a for variable, no problems with it 
    SET padded_h1=0%%h 

    rem padded_h1 has changed its value inside de for, so 
    rem we need to get the changed value not the initial value 
    rem the variable had when the block was readed 
    SET padded_h=!padded_h1:~-2! 

    rem and the same with the inner loop  
    for /l %%m in (0,1,59) do (
     SET padded_min1=0%%m 
     SET padded_min=!padded_min1:~-2! 

     C:\android-sdk-windows\platform-tools\adb -e shell date -s 20131202.!padded_h!!padded_min!00 
     ping 127.0.0.1 -n 2 > nul 
    ) 

) 
+0

謝謝,但它不起作用http://pastebin.com/2bEdD42c – lordmegamax

+0

是的,它的工作原理。 '%%'在哪裏? –

+0

我複製了你的第二個代碼,另存爲* .bat並運行... – lordmegamax

1

您不能使用循環內內的for循環設置的變量沒有DelayedExpansion。

它改成這樣:

setlocal enabledelayedexpansion 
for /l %%h in (0,1,23) do (
    SET padded_h1=0%%h 
    SET padded_h=!padded_h1:~-2! 

    for /l %%m in (0,1,59) do (
     SET padded_min1=0%m% 
     SET padded_min=!padded_min1:~-2! 

     C:\android-sdk-windows\platform-tools\adb -e shell date -s 20131202.!padded_h!!padded_min!00 
     ping 127.0.0.1 -n 2 > nul 
    ) 
) 
+0

感謝您的回答。但我在控制檯有奇怪的結果:http://pastebin.com/EnFUNHcb – lordmegamax

相關問題