2012-02-22 23 views
7

私はこのようなバッチ文字列を作成しようとしています。これは私がやっていることですが、うまくいきません。バッチ文字列の連結

set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo %str% 
+5

「動作しない」の後に入力する必要があるのは、*どのように*動作しないのかの説明です。私たちはあなたの心を読んだり、ここからあなたの画面を見ることはできません。私たちが続けなければならないことは、あなたの質問で私たちに語っていることだけです。助けが必要な場合は、問題がどのようなものであるのか、どのように試したのかがわからないことを教えてください。 –

答えて

11

確かにうまくいきます。これを証明するには、値を定義した後にSET STRを追加すると、正しい値が表示されます。

値をエコーバックしようとすると、実行中の行がecho >abcd_になります。 >は、引用符で囲まれたまたはエスケープので、あなたは、その後、引用符を見て気にecho "%str%"にあなたの行を変更していない場合、それは単に引数なしでECHOの出力に含まを取り、

「abcd_」という名前のファイルにリダイレクトされていませんそれが動作します。

他のオプションが遅れ拡張を有効にして使用することです(私はこれは、バッチスクリプトコードであると仮定すると、コマンドラインで実行していないよ)

setlocal enableDelayedExpansion 
set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo !str! 

ノーマル%var%拡大が通訳しながら、早い段階で発生します行を解析しています。 Delayed !var!拡張は実行の直前に終了します。リダイレクトは途中で検出されます。そのため、通常の拡張は機能しません。インタプリタは展開された>文字を認識し、それを出力リダイレクション演算子として解釈します。遅延拡張は、リダイレクトが解析されるまで、インタープリタからの文字を>に隠します。

遅延拡張の詳細については、コマンドラインからSET /?と入力し、「最後に遅れた環境変数拡張のサポート」で始まる段落から読んでください。

+0

ありがとうございました。問題は、!strの代わりにecho%str%を使用したことです。両者の違いを教えてください。 – NewQueries

+0

@ NewQueries-私は解説で説明を拡張しました – dbenham