2016-06-27 6 views
0

ディレクトリから最初のファイルを収集してからファイルを処理しようとしています。私は、我々が持っていると確信していますWindowsバッチ:リセット変数

for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
set filename=%%i 
set newname=%filename:~14% 
set transname=%filename:~25% 
goto tests 
) 
:tests 
echo %filename% 
echo %newname% 
echo %transname% 

:しかし、実行していると私は、ファイル名の下に

ための変数に値を格納することができませんバッチファイルを処理して2回目のサンプル・コードでありますSETLOCALという名前を使用しますが、上記のコードでは作成できません。

ヘルプ!

+1

有名な[遅れ拡張トラップ](http://stackoverflow.com/a/30284028/2152082)... "最初のファイルを収集する" ための – Stephan

答えて

1

ブロックが解析されたときに展開が1回だけ行われるため、ブロック内のパーセント展開、つまりFORブロックも避ける必要があります。

for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
set filename=%%i 
goto :tests # Get only the first file 
) 
exit /b 

:tests 
set newname=%filename:~14% 
set transname=%filename:~25% 
echo %filename% 
echo %newname% 
echo %transname% 
exit /b 

@Stephanが指摘したように、ブロック内で遅延拡張を使用することもできます。

setlocal EnableDelayedExpansion 
for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
    set filename=%%i 
    set newname=!filename:~14! 
    set transname=!filename:~25! 

    goto :tests # Get only the first file 
) 
+0

、 'ループを切断することを意図しているgoto'。 – Stephan

+0

@Stephanはい。 'call'の代わりに' goto'を修正しました。ありがとう – nawazlj

+0

@Stephanあなたは正しいです、私はより慎重にテキストを読む必要があります – jeb

関連する問題