在copy命令中使用set变量

时间:2012-04-18 07:20:41

标签: windows batch-file dos

如何使用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%无效,但是我可以使用'echo'看到该值

2 个答案:

答案 0 :(得分:3)

这是您向我们展示的整批文件吗?

我有一种模糊的感觉,你在set内部copyif或带有一个块的类似声明,例如。

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

在这种情况下,您需要延迟扩展才能使变量生效生效,因为括号中的块被解析为单个命令,并且所有变量都在 parse 时被替换,而不是在runnin命令时。因此,一旦块运行,%MY_WORKSPACE%将为空。

您可以使用

解决此问题
setlocal enabledelayedexpansion

位于批处理文件的顶部,并使用!MY_WORKSPACE!代替%MY_WORKSPACE%,这将在运行命令之前扩展变量,而不是在解析时。

答案 1 :(得分:0)

尝试这种方式:

set MY_WORKSPACE="workspace1.0.1"