Kakeishi_Misa
@Kakeishi_Misa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【バッチ】for文のバッチコマンドをファイルに書き込めない

解決したいこと

バッチファイルで別の新しいバッチファイルを作成し、
新しいバッチファイルの中でコマンドが記載されている状態にしたいです。

例)
Create.batを実行すると、
test.batが新規作成され、test.batの中でコマンドが記載されている状態にしたいです。

発生している問題・エラー

echo を2行追加すると処理に失敗し、
ファイルが作成されるだけで、ファイルの中には何も記載されていません。

例)

  type nul > test.bat
  (
    echo set /a counter=0
    echo for  %%A in (*.zip) do ( if exist %%A (set /a counter=counter+1) )
  ) > test.bat

2行目を削除した場合成功します。↓↓
(test.batのファイルに「set /a counter=0」が出力されています。)

  type nul > test.bat
  (
    echo set /a counter=0
  ) > test.bat
0

1Answer

「コマンドプロンプト」は無理を重ねて拡張されてきて、もう滅茶苦茶になってますよね…

  type nul > test.bat
  (
    echo set /a counter=0
    echo for %%%%A in ^(*.zip^) do ^( if exist %%%%A ^(set /a counter=counter+1^) ^)
  ) > test.bat

書き出す.batの中ではループ変数は%Aではなく%%Aにしたいので、この.batでは%%%%Aと書きます。

echoしたい文字列の中に()がありますが、これは構文上エスケープしないといけないので、^( ^) と書きます。

1Like

Comments

  1. @Kakeishi_Misa

    Questioner

    ありがとうございます!
    解決しました!!

    ちにみに、
    書き込みたいコマンドが10行ほどある場合も
    echoを10行書くのでしょうか。

    もう少しスマートに記載する方法があれば
    ご教示頂きたいです。


  2. その10行がたとえば一カ所だけ違うということなら、その違う部分のリストを作ってループさせて書き出すこともできると思いますけど、それだけで結構複雑になって可読性も悪くなりますね。
    10個くらいなら10行書いちゃうほうがいいかも。
  3. @Kakeishi_Misa

    Questioner

    承知しました。
    ありがとうございます。

Your answer might help someone💌