我有这个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”
答案 0 :(得分:4)
=
登录set "varname=varvalue"
命令两侧的空格。虽然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
之类的东西,远会更好。这对于不经意的读者来说实际上是有意义的。