- - PR -
バッチファイルのfor文による多重ループについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-28 14:52
初歩的な質問で大変恐縮なのですが、Windowsバッチファイルに関する
下記不具合についてお分かりになられる方がいましたらご教授頂けないでしょうか。 data01.txtには以下の内容が記載されています。 TEST001 TEST002 data02.txtには以下の内容が記載されています。 200 201 202 これをマージしてresult.txtというファイルに出力するのですが、 マージした結果が以下のようになっている必要があります。 TEST001 200 TEST001 201 TEST001 202 TEST002 200 TEST002 201 TEST002 202 上記のような出力を実現すべく、下記コードのバッチファイル(work.bat)を 作成しました。 ================<work.bat>=========================== @echo off set TEXT1=C:\work\data01.txt set TEXT2=C:\work\data02.txt for /f %%z in (%TEXT1%) do call :add1 %%z :exit exit /b :add1 set DATA01=%1 for /f %%y in (%TEXT2%) do call :add2 %%y :add2 set DATA02=%1 echo %DATA01% %DATA02% >> C:\work\result.txt ======================================================= これを実行すると、result.txtの内容が以下のようになってしまいます。 TEST001 200 TEST001 201 TEST001 202 TEST001 TEST001 TEST002 200 TEST002 201 TEST002 202 TEST002 TEST002 for文による多重ループで実現しようとしたのですが、何故かTEXT2読み込みの最後に TEXT1の値が入ってしまいます。 原因がさっぱり分からないのでお分かりになる方、教えて頂けますでしょうか。 以上宜しくお願いします。 | ||||
|
投稿日時: 2008-05-28 15:06
なぜそのような結果になるかというと、:add1 でおこなっている処理の後、:add2 の内容が実行されているからです。
こんな感じでいけると思います。 ※\記号が増えていたのを修正 [ メッセージ編集済み 編集者: rain 編集日時 2008-05-28 15:15 ] | ||||
|
投稿日時: 2008-05-28 17:01
rainさん
早速のご回答ありがとうございます。 exitのタイミングなんですね〜 exitを二つ用意するとは思いもつきませんでした。 早速試した結果、下記の通り想定通りの結果を出してくれました! TEST001 200 TEST001 201 TEST001 202 TEST002 200 TEST002 201 TEST002 202 ありがとうございます。本当に助かりました。 また何かありましたら宜しくお願いします。 | ||||
|
投稿日時: 2008-05-28 17:23
exit命令が複数あるのが気持ち悪い場合は、こんな感じですかねぇ。
gotoも気持ち悪いという向きもあるかもしれませんが、そこは我慢してもらうとして。
このようなcall命令の使い方は知らなかったので、参考になりました。 [ メッセージ編集済み 編集者: rain 編集日時 2008-05-28 17:24 ] | ||||
|
投稿日時: 2008-05-28 18:52
rainさん
またまた補足ありがとうございます。 こちらこそ大変勉強になりました。 上記for文を使用してまた別のことをやろうとしたのですが ちょっと問題が起きました。 これは別スレッドに記載します。 情報ありがとうございました。本当に助かりました。 |
1