2012-04-18 54 views
0

如何使用set變量將文件複製到bat文件中。在複製命令中使用設置變量

[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

您的語法是絕對正確的。 「set」以及「%MY_WORKSPACE%」。問:你真的有一個目錄「d:\ workspace1.0.1」嗎?問:你得到了什麼確切的錯誤? – paulsm4 2012-04-18 07:24:56

+1

就像喬伊問:問:你給我們展示的是整批文件嗎? – paulsm4 2012-04-18 16:03:43

回答

3

這是您向我們展示的整批文件嗎?

我有一種模糊的感覺,你在if的內部使用setcopy或者帶有塊的類似語句,例如,

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

在這種情況下,需要爲變量的變化延遲的擴展,因爲括號內的塊進行解析,作爲單個命令和奔跑的命令不是當所有變量在解析時間取代,生效。因此,塊運行後,%MY_WORKSPACE%將爲空。

您可以通過使用

​​

在您的批處理文件的頂部,使用!MY_WORKSPACE!,而不是%MY_WORKSPACE%這將只是之前運行的命令,而不是在解析擴展變量解決這個問題。

+0

+1我認爲這不僅僅是一種「模糊」的感覺,考慮到這是人們對批處理文件存在的問題最常見的根源之一:-) – dbenham 2012-04-18 14:35:28

+0

這幾乎總是答案»我設置變量但價值沒有得到行後«;-) – Joey 2012-04-18 15:12:07

+0

謝謝喬伊... setlocal解決了這個問題。你是對的它是在if-block – xbmono 2012-04-18 23:10:09

0

看到的值嘗試這種方式:

set MY_WORKSPACE="workspace1.0.1" 
+1

這不會改變。 – Joey 2012-04-18 13:01:21