電子書籍の厳選無料作品が豊富!

末尾のバッチコードは複文(変数がvの方)では動作しませんが、
非複文(変数がwの方)では動作します。
これはバッチ処理の文字列置換機能のバグでしょうか?仕様でしょうか?

意図は、バッチの文字列変換機能の、

%変数:<置換対象文字列>=<置換後文字列>%

により

「<半角スペース>a<半角スペース>b」



「ab」

に変換することです。

IF t==t

は無くてもいいのですが、複文をよく使う場合の雰囲気を出すためにつけてあります。

rem 以下コード----------------------------------------------------------------

rem 複文
IF t==t ( Set v= a b
Set v=%v: =% )
echo v=%v%


rem 非複文
Set w= a b
Set w=%w: =%
echo w=%w%


pause

A 回答 (1件)

バッチファイル。

IF文やFOR文の中で複数コマンドを書く時の注意点 -
Windowsのコマンドプロンプト(bat,cmd)
http://tounderlinedk.blogspot.jp/2011/01/if-wind …

>**** 問題となる原因
>o コマンドプロンプトは、コマンドを1つずつ実行します。
>o そして、IF文(やFOR文)は、括弧を含めて1つと解釈します。
>o その結果、IF文(やFOR文)の中にある %環境変数% は、全て、IF文(やFOR文)を
>実行する直前の値で置き換わります。
とあります。

カッコ内で v の設定と参照しても設定が生きてないのが期待通りに動かない原因です。
事前に v をクリアしておき、
カッコ内で echo %v% してみると確認できます。

上のような説明が MS からされてるなら「仕様」でしょう。
    • good
    • 0
この回答へのお礼

()内は、()内で設定した値の%%の中での置換どころか、
参照自体がダメなんですねえ。

普通に考えると、()外と()内の値が相互に参照できないとか、
そういう風ならありそうなのですが、
まさか()内で設定した値を()内で参照できないとは
思ってもみませんでした。

勉強になりました。
ありがとうございました。

お礼日時:2013/12/31 14:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!