- ベストアンサー
DOSコマンドバッチのFOR文の記述
FOR文で以下のように記述しています。 SET FILENAME=aaa.txt FOR /F "tokens=1,2" %%i IN (revs.txt) DO SET FILENAME=%%i-%%j.txt & echo %FILENAME% echoで直前でSETした値を表示したいのですが、どうしても変化しません。(aaa.txtのまま) ※%i,%jには正しく値が設定されています。 以下を教えてください。 ・FILENAMEに値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
バッチファイルで使う場合にはsetlocal コマンドに 引数 ENABLEDELAYEDEXPANSION を与えることで指定できますよ。 FOR /F "tokens=1,2" %%i IN (revs.txt) DO ^ echo %%i-%%j.txt &^ echo %%i-%%j.txt こっちは、 FOR /F "tokens=1,2" %%i IN (revs.txt) DO ( echo %%i-%%j.txt echo %%i-%%j.txt ) でお望みの動作にできると思います。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
・FILENAMEに値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) 前者は遅延環境変数を有効にしてください。 詳細はcmd /? と set /? で。 後者は改行直前に ^ を置きます。
お礼
遅延環境変数…難しいです。 バッチファイルのダブルクリックで実行したい場合は実現できないのでしょうか? わからず仕方が無いのでコマンドプロンプトを開き、CMD /V:ONと入力してからバッチを呼び出しましたが、今度はIとJを使用している別の個所が展開されなくなってしまいました。 (質問時には文字数制限があるため簡略版を記述しましたが、実際にはもう少し長い) とりあえず難しいということはわかりました。この件に関しては一旦あきらめ、SETせずにそのまま使用することにします。 非常に参考になりました。ありがとうございました。
補足
改行のところでもうひとつ質問させてください。 教えていただいたとおりに記述したところ以下のような記述は成功しました。 FOR /F "tokens=1,2" %%i IN (revs.txt) DO ^ echo %%i-%%j.txt &^ echo %%i-%%j.txt 可能であれば折り返した次の行(echoの各行)をスペースかタブを使用してインデントをつけたいと思っています。 FOR /F "tokens=1,2" %%i IN (revs.txt) DO ^ echo %%i-%%j.txt &^ echo %%i-%%j.txt でもどちらもうまくいきません。これはできないのでしょうか?もし方法があれば教えてください。 よろしくお願いします。
お礼
解決しました。 いろいろ回り道をしてしまいましたが、聞いてしまえばすぐに解決するものですね。 これでもLinuxシェルやJavaは普通に書けるんですけど DOSコマンドバッチは慣れていなくて苦労しています。 非常に助かりました。ありがとうございました。