10

对脚本完全陌生,试图通过搜索网络找到解决方案,但我很难过,所以请寻求帮助!

我正在尝试将 robocopy 与变量一起用作源和目标,每个变量都不同,但我无法获得正确的语法。

我可以正常工作的硬代码是:

robocopy C:\Users\me\Documents\a C:\Users\me\Documents\b

但我不能让它与变量一起工作。在阅读完之后,我尝试过以下所有变体,包括 " 和 % in/out,有和没有 Set,但它们都没有奏效。

Set src="C:\Users\me\Documents\a"
Set dest="C:\Users\me\Documents\b"

robocopy %src% %dest%

希望这是对我正在尝试做的事情的清晰解释,如果不要求澄清的话。提前感谢您的帮助。

4

6 回答 6

4

我发现 Robocopy 对语法很随意。我发现了与您类似的问题:
此代码有效:

Set Today=%DATE:~0,3%
Robocopy "G:\folder A" "U:\%Today%\folder A"  ^
/S /XJD /R:25 /W:4 /NP /copyall ^
/LOG:"U:\%Today%\FolderALog.txt"
IF ERRORLEVEL 8 goto Badend

这个(结构良好的)代码不起作用

Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A" 
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target%   ^  
/S /XJD /R:25 /W:4 /NP /copyall  ^
/LOG:%Logname%
Pause

但是,在第二个示例中,将第一个延续从命令行中取出,它可以工作:

Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A"
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target% /S /XJD /R:25 /W:4 /NP /copyall  ^
/LOG:%Logname%
Pause

自 DOS 时代以来,我一直在批处理命令作业中使用插入符号 (^) 作为延续字符,但在这种情况下,解析器尝试将其与前一个变量连接起来,并且作业终止,因为系统认为我正在尝试将文件夹命名为“U:\%Today%\folder A ^”。就是这样——你一直在尝试,直到有效果为止。故障排除技术:对新定义的变量进行回显然后暂停允许您检查拼写错误和放错位置的引号。最后的停顿让你有足够的时间阅读错误代码,如果有的话。我曾经遇到的另一件事是无意中在用引号括起来的路径中插入了一个不可打印的字符来代替空格。RoboCopy 非常强大,非常值得偶尔修改一些敏感的语法。

于 2014-01-03T22:20:48.723 回答
4
set "src=C:\Users\me\Documents\a"
set "dest=C:\Users\me\Documents\b"

robocopy "%src%" "%dest%" 

你的sintax没什么不好。这种方式“更健壮”或更标准或更习惯,...

但是 robocopy 不是复制而不是 xcopy。您要求 robocopy 从源复制到目标更改或新文件。如果没有更改,robocopy 将不会复制任何内容。如果您尝试过并且有效,....如果没有更改,则没有文件复制。

而且您还没有要求 robocopy 复制子目录。因此,如果源目录中没有文件,则不会复制任何内容。

于 2013-11-13T16:34:35.947 回答
2

看起来像一个老问题,但我今天自己遇到了这个问题,并通过在 set 命令中使用双斜杠解决了这个问题:

Set src="C:\\Users\\me\\Documents\\a"
Set dest="C:\\Users\\me\\Documents\\b"

robocopy %src% %dest%
于 2019-03-25T16:02:49.663 回答
0

如果您尝试使用 .bat,代码将如下所示:

Set src="C:\Users\me\Documents\a"
Set dest="C:\Users\me\Documents\b"

robocopy.exe %src% %dest%

你忘了把.exe

于 2017-01-18T10:57:00.740 回答
0

试试这个方法

Set src=C:\Users\me\Documents\a
Set dest=C:\Users\me\Documents\b

robocopy %src% %dest% /E

/E - 用于复制子文件夹,包括空子文件夹

于 2017-04-17T10:26:46.787 回答
-2

伙计尝试 XCOPY 命令它肯定会工作!

例子:

xcopy "C:\Users\me\Documents\a" "C:\Users\me\Documents\b"

它会询问目标是文件夹还是文件,所以一旦你选择了文件夹(dir),它就会复制!

希望能帮助到你!:D

于 2013-11-20T11:28:20.053 回答