IF %existFlg%==TRUE (
の%existFlg%
の変数展開は、for
の実行前に一度だけ行われます。
for
の直前のこの変数の値がもし空なら、for
文は、
CMD
1for %%a in (aaaaaaa,bbbbbbb,ddddddd) do (
2
3IF EXIST test.csv SET existFlg=TRUE
4
5IF ==TRUE (
6ECHO ファイルが存在しました。
7)
8
9)
となって、if
が文法エラーになるはずです。
これだけの処理なら、フラグを設けず、
CMD
1SET valueList=aaaaaaa,bbbbbbb,ddddddd
2for %%a in (%valueList%) do (
3 IF EXIST test.csv (
4 ECHO ファイルが存在しました。
5 )
6)
と書きます。
より複雑な処理で、どうしても変数更新と参照が必要なら、
CMD
1for %%a in (%valueList%) do call :SUB "%%a"
2exit /b
3
4:SUB
5SET existFlg=FALSE
6IF EXIST test.csv SET existFlg=TRUE
7IF %existFlg%==TRUE (
8 ECHO ファイルが存在しました。
9)
10exit /b
と中身をサブルーチンに切り出すか、遅延環境変数展開というものを使います。
CMD
1setlocal enabledelayedexpansion
2SET valueList=aaaaaaa,bbbbbbb,ddddddd
3for %%a in (%valueList%) do (
4 SET existFlg=FALSE
5 IF EXIST test.csv SET existFlg=TRUE
6 IF !existFlg!==TRUE (
7 ECHO ファイルが存在しました。
8 )
9)
遅延環境変数展開を使うと、それまで普通文字だった!
が特殊文字になるので、データの中やファイル名などで!
を使っていると駄目です。
#追記
今回だと、比較的影響の少ない変更としては、変数が未定義や空かどうかを調べるif defined
を使う方法もあります。
CMD
1SET valueList=aaaaaaa,bbbbbbb,ddddddd
2for %%a in (%valueList%) do (
3 SET existFlg=
4rem ↑ = の後に空白が入らないように注意
5 IF EXIST test.csv SET existFlg=TRUE
6 IF defined existFlg (
7 ECHO ファイルが存在しました。
8 )
9)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 12:43 編集