2017-07-17 8 views
0

私はバッチで初心者ですが、正しく動作するようにしようとしていますが、間違っていることを理解できません。何らかの理由でカウンタが増加しませんか?Windowsバッチ:ネストされたforループカウンタが機能しない

@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である必要があります。これは1つのコマンドです。また、ネストされた変数は!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 –

関連する問題