1

simple.txtとその内容を持っているバッチファイルを書くのは初めてです。

aaa 1
bbb 2
ccc 3
bbb 4
aaaa 5
aaccdd 7

バッチファイルを実行します。

@echo off
FOR /F "tokens=2 delims= " %%a in ('FindStr "aa" ^"simple.txt^"') DO (
    SET TEMP_VAR=%%a
    echo %TEMP_VAR%
)

結果は

7
7
7

しかし、私が期待するのは

1
5
7

なぜこれが起こるのですか?私が考えているのは、CのようなまたはJavaのようなforループです。本当に違うの?

4

1 に答える 1

3

バッチを学習する人の古典的な問題:-)

かっこの内容を含む FOR ループ全体が、ループの実行前に解析されます。通常の展開は解析の一部として行われるため、表示される値はループが実行される%TEMP_VAR%に存在していた値です。

setlocal enableDelayedExpansion解決策は簡単です。先頭に追加し、!TEMP_VAR!代わりに使用します。

@echo off
setlocal enableDelayedExpansion
FOR /F "tokens=2 delims= " %%a in ('FindStr "aa" ^"simple.txt^"') DO (
    SET TEMP_VAR=%%a
    echo !TEMP_VAR!
)

HELP ドキュメントには、問題の説明が記載されています。コマンドラインからHELP SETorを入力します。SET /?通常展開と遅展開の説明は上から2/3くらい下です。

于 2012-08-07T12:07:18.340 に答える