2012-04-18 7 views
0

set変数を使用してファイルをbatファイル内にコピーする方法を教えてください。上記の例でcopyコマンドでset変数を使用する

[場合run.bat]

set MY_WORKSPACE=workspace1.0.1 
copy /Y /V D:\%MY_WORKSPACE%\webapp\target\app-generic.war C:\Opt\jboss-4.2.3.GA\server\default\deploy\ 

%のMY_WORKSPACE%は無効である、しかし、私は 'エコー'

+0

あなたの文法は間違いありません。 "セット"と "%MY_WORKSPACE%"の両方。 Q:実際に "d:\ workspace1.0.1"というディレクトリがありますか? Q:正確なエラーは何ですか? – paulsm4

+1

ジョーイのように尋ねられました:Q:あなたが私たちに見せるバッチファイル全体ですか? – paulsm4

答えて

3

あなたは私たちに見せるバッチファイル全体ですか?

setcopyifなどのブロック内にある曖昧な感じがあります。この場合

if foo==bar (
    set MY_WORKSPACE=workspace1.0.1 
    copy ... 
) 

あなたは、括弧内のブロックは、単一のコマンドとして解析され、コマンドをのrunninないとき、すべての変数は、 解析時に置換されているので、有効にする変数の変更のための遅延拡張を必要としています。したがって、ブロックが実行されると %MY_WORKSPACE%は空になります。

はあなたのバッチファイルの先頭に

​​

を使用し、直前のコマンドを実行している、いないしばらくの解析に変数を拡大する代わりに%MY_WORKSPACE%!MY_WORKSPACE!を使用することによってこの問題を解決することができます。

+0

+1これは、人々がバッチファイルで持っている問題の最も一般的な根本原因の1つであると考えると、「あいまいな」感じ以上のものだと信じています。 – dbenham

+0

これはほとんど常に答えです。値はそれ以降の行で取り上げられることはありません«;-) – Joey

+0

ありがとうJoey ... setlocalは問題を修正しました。あなたはそれが正しいかどうかは、ブロックの内側にあった – xbmono

0

を使用して値を確認することができ、この方法を試してください:

set MY_WORKSPACE="workspace1.0.1" 
+1

これは何も変更しません。 – Joey