• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バグ?仕様?(バッチ複文での文字列置換))

バッチ複文での文字列置換のバグや仕様について

このQ&Aのポイント
  • バッチ複文での文字列置換機能について疑問があります。末尾のバッチコードは複文では動作しないが、非複文では動作することがわかりました。これはバッチ処理の文字列置換機能のバグなのか、仕様なのか知りたいです。
  • バッチの文字列変換機能で「%変数:<置換対象文字列>=<置換後文字列>%」という形式を使っています。例えば、<半角スペース>a<半角スペース>b を ab に変換したいです。複文を使わない場合にはうまく動作しますが、複文を使うと動作しないことがわかりました。
  • バッチの文字列置換機能が複文でうまく動作しない理由について質問です。バッチ処理での文字列の置換について詳しい方からの回答をお待ちしております。

質問者が選んだベストアンサー

  • ベストアンサー
  • unagi-pie
  • ベストアンサー率41% (166/397)
回答No.1

バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点 - Windowsのコマンドプロンプト(bat,cmd) http://tounderlinedk.blogspot.jp/2011/01/if-windowsbatcmd.html に >**** 問題となる原因 >o コマンドプロンプトは、コマンドを1つずつ実行します。 >o そして、IF文(やFOR文)は、括弧を含めて1つと解釈します。 >o その結果、IF文(やFOR文)の中にある %環境変数% は、全て、IF文(やFOR文)を >実行する直前の値で置き換わります。 とあります。 カッコ内で v の設定と参照しても設定が生きてないのが期待通りに動かない原因です。 事前に v をクリアしておき、 カッコ内で echo %v% してみると確認できます。 上のような説明が MS からされてるなら「仕様」でしょう。

Donotrely
質問者

お礼

()内は、()内で設定した値の%%の中での置換どころか、 参照自体がダメなんですねえ。 普通に考えると、()外と()内の値が相互に参照できないとか、 そういう風ならありそうなのですが、 まさか()内で設定した値を()内で参照できないとは 思ってもみませんでした。 勉強になりました。 ありがとうございました。

関連するQ&A