Robocopy - 文件名中包含“&”符号

4

我有一个非常基本的批处理脚本,它检查一个传入的文件夹,并根据文件类型移动文件到指定位置。现在,出现带有"&"的文件夹会导致脚本失效。你该如何解决这个问题?我在网上找不到明显的答案。

robocopy.exe "%location%" "%destination%" /E /tee /LOG+:C:\Users\etc\Log.txt

编辑2:

好的,感谢下面的评论和大量的试错,我发现这是引号的问题。现在,经过一番试错,我找到了一组引号和无引号的组合,它能够工作,但我不知道为什么。如果有人能够解释为什么这样做有用,而其他组合则没有用,我会很感激...batch真的很奇怪。

输入 -> Test.bat "C:\etc\etc\" - 路径需要加引号

set location=%1 - 无需引号

set type="%~2" - 需要引号

set destination="C:\Users\xxxx\Desktop\Destination" - 需要引号

set logfile="C:\Users\xxxx\Desktop\robolog.txt" - 需要引号

robocopy.exe %location% "%destination%" /E /tee /LOG+:%logfile% - 源路径不需要引号,但目标路径需要???

引号是否会互相抵消?为什么增加引号会使其无法工作,但只在某些情况下才有效呢? 同时,使用%~1 vs %1 vs "%1" vs "%~1"会产生不同的结果。


1
你是指源文件夹还是目标文件夹,或者是被复制的文件夹。如果源/目标文件夹像你展示的那样用双引号括起来,它们应该可以正常工作,并且可以使用 & 符号。 - foxidrive
1
您发布的命令似乎不容易受到文件/文件夹名称中的“&”字符的攻击。问题可能出现在调用 robocopy 之前。也许与您如何分配 locationdestination 变量有关。像 @Dany Bee 的答案中一样,在赋值周围加上双引号 SET "var=value",这样就可以解决问题了。(在 robocopy 命令行中仍需要双引号。) - Andriy M
检查 %location%%destination% 是否已经被引用。 - LS_ᴅᴇᴠ
我已经更新了主贴并添加了更多信息。 - urbanrider
1个回答

9
我进行了测试:
@ECHO OFF &SETLOCAL
SET "location=this & that"
SET "destination=more & more"
robocopy.exe "%location%" "%destination%" /E /tee /LOG+:"%destination%\Log.txt"

我没有收到任何错误消息:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows     ::     Version XP010
-------------------------------------------------------------------------------

  Started : Wed Jul 31 09:59:55 2013

   Source : C:\TEST\this & that\
     Dest : C:\TEST\more & more\

    Files : *.*

  Options : *.* /TEE /S /E /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

------------------------------------------------------------------------------

                Total    Copied   Skipped  Mismatch    FAILED    Extras
     Dirs :         1         0         1         0         0         0
    Files :        81        81         0         0         0         1
    Bytes :    28.3 k    28.3 k         0         0         0         0
    Times :   0:00:00   0:00:00                       0:00:00   0:00:00

    Speed :              184585 Bytes/sec.
    Speed :              10.562 MegaBytes/min.

    Ended : Wed Jul 31 09:59:55 2013

好的,我制作了一个类似的测试批处理文件,它确实可以工作。问题源于我对批处理如何使用引号的理解不足。 - urbanrider
终于有一个复制我的 \Lounge & Chillout\ 文件夹的解决方案了。在变量名前面写 " 对我来说是绝对新的。但它确实有效。@dany-bee: 你能解释一下这个语法吗? - PeterCo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接