没有读入SET变量.BAT文件

时间:2017-01-18 01:46:24

标签: windows batch-file set

我有这个Windows批处理文件,我无法正常工作 基本上我在一个位置有一个文件夹,我需要将其复制到另一个文件夹,但也重命名了新的文件夹名称。

@Echo off
::
set 836147398 = @Taunus_A3
:: 
Echo Copying %836147398%
xcopy "C:\Users\arrona\Desktop\Update Mods\steamapps\workshop\content\107410\836147398" "C:\TCAFiles\Games\arma3exile\TCA.Mods\%836147398%" /s/h/e/k/f/c

所以我需要的是333310405的文件夹内容被复制到C:\TCAFiles\Games\arma3exile\TCA.Mods\,但是作为@Taunus_A3文件夹名称。

它会复制文件夹和所有内容,但它不会读取变量。它将回应“复制836147398”而不是回应“复制@ Taunus_A3”

2 个答案:

答案 0 :(得分:4)

  1. 摆脱=登录set "varname=varvalue"命令两侧的空格。
  2. 避免使用前导数字命名变量。阅读Command Line arguments (Parameters)
  3. 虽然set "836147398=@Taunus_A3"是有效命令,但echo %836147398%会显示

    • @Taunus_A3在命令提示符下,但
    • 批处理脚本中的
    • 36147398,因为%8被评估为第8个提供的参数(在大多数情况下可能是空字符串),并且设计会忽略孤立跟踪%百分号。

    解决方案:使用非密码前缀,例如_如下强调:

    set "_836147398=@Taunus_A3"
    echo %_836147398%
    

答案 1 :(得分:2)

摆脱=标志两侧的空格。从第二个echo可以看出,您实际上是在名称中创建了一个带有嵌入空间的环境变量(和值,就此而言):

c:\pax> set 42=

c:\pax> set 42 = 57
c:\pax> echo .%42%.
.%42%.
c:\pax> echo .%42 %.
. 57.

c:\pax> set 42=57
c:\pax> echo .%42%.
.57.

一旦完成,替换就可以根据需要工作,至少在命令行(a)(尽管你的源代码区域在代码和文本方面有所不同,你可能想要除此之外:

c:\pax> set 836147398=@Taunus_A3

c:\pax> echo xcopy "C:\Users\arrona\Desktop\Update Mods\steamapps\workshop\content\107410\836147398" "C:\TCAFiles\Games\arma3exile\TCA.Mods\%836147398%" /s/h/e/k/f/c

xcopy "C:\Users\arrona\Desktop\Update Mods\steamapps\workshop\content\107410\836147398" "C:\TCAFiles\Games\arma3exile\TCA.Mods\@Taunus_A3" /s/h/e/k/f/c

(a)但是,您应该注意的一件事是836147398实际上是一个特别变量名称,部分原因是它会,在脚本中,实际上使用参数名称(如%8)优先于%8-something-or-other%,但也因为它不是非常助记。

使用像dest_dir之类的东西,会更好。这对于不经意的读者来说实际上是有意义的。