2017-07-17 85 views
0

我是批處理的新手,一直試圖讓這個工作正常,但無法弄清楚我做錯了什麼。櫃檯因爲某種原因不增加?Windows批處理:嵌套循環計數器不工作

@echo off 
set local enabledelayedexpansion 

set /a counter=0 
for /F "delims=" %%a in ('dir /b/ad/o "C:\Sources"') do (
for /F "delims=" %%i in ('dir /b/ad/o "C:\Sources\%%a"') do (
set a[%counter]=%%i 
set /a counter=counter+1 
echo value of counter is: %counter% 
) 
) 
echo array 0 is: %a[0]% 
echo array 1 is: %a[1]% 
+1

你介意告訴我們你的代碼應該做的結束你的腳本,它實際上呢?我們通常沒有水晶球......並閱讀此:[EnableDelayedExpansion](http://ss64.com/nt/delayedexpansion.html)... – aschipfl

+0

第一for循環獲取目錄中的所有文件夾並循環遍歷要分配給數組的子文件夾。 – Brian

回答

1

SET LOCAL的確應該是SETLOCAL。這是一個單一的命令。嵌套變量也應該用!var!而不是%var%來引用。如果您使用%var%它將使用外部範圍(並且不能正常工作)。

https://ss64.com/nt/delayedexpansion.html

@ECHO OFF 

REM "SETLOCAL" not "SET LOCAL" 
SETLOCAL enabledelayedexpansion 

SET counter=0 
FOR /L %%a IN (1,1,10) DO (
    FOR /L %%i IN (1,1,10) DO ( 
     REM USE "!" instead of "%" 
     SET X[!counter!]=%%i 
     SET /a counter=!counter! +1 
     echo value of counter is: !counter! 
    ) 
) 
ECHO array 0 is: %X[0]% 
ECHO array 1 is: %X[1]% 

順便說一句,如果你希望你的變量只是作用域爲您的批處理文件,你應該用ENDLOCAL

+0

設置本地是一個錯字,但是!與%做出了區別。感謝幫助!什麼是需要的原因!與%? – Brian

+0

我知道的唯一原因是'因爲這就是它的工作方式。'看來這就是批處理文件如何解決範圍問題。 –

+0

https://superuser.com/questions/340729/variable-scope-in​​-batch-files –