0

For ループの外で変数を使用しようとしています。ループ内のエコーは、期待どおりの結果をもたらします。ループの外側で変数をエコーすると機能しません。以下はスクリプトです-

'SETLOCAL ENABLEDELAYEDEXPANSION
SET x=0
FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO (
SET /a x+=1& SET /a cnt+=1& SET Fname%x%=%%a& SET FDate%x%=!Fname%x%:~0,8!
ECHO %x% !cnt! !Fname%x%! !Date%x%!
)

set z=3
ECHO !FDate%z%! `
4

1 に答える 1

1

ここにあるのは、あなたが見ているものの悪い解釈です。ループが機能しません(ループfor外で何をしようとしているかによって決まりforます)。

これ

Fname%x%=%%a
SET FDate%x%=!Fname%x%:~0,8!

ループ内で実行されます。変数に対する遅延展開がないため、x変数の値の変更はforループ内では表示されず、すべての反復は次のように実行されます。

Fname0=%%a
SET FDate0=!Fname0:~0,8!

したがって、forループ内のコードが機能するというあなたの主張は正しくありません。動作していないため、外部のコードはfor意図したとおりに動作しません

次のようなものが必要です

FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO (
    SET /a x+=1
    SET /a cnt+=1
    SET "Fname!x!=%%a"
    for %%b in (!x!) do (
        SET "FDate!x!=!Fname%%b:~0,8!"
        ECHO !x! !cnt! !Fname%%b! !FDate%%b!
    )
)

これにより、「配列」が適切に設定されるため、forループ外のコードが機能します

于 2014-06-20T09:30:01.380 に答える