将robocopy与源和目标一起用作变量

问题描述 投票:8回答:6

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

我正在尝试将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%

希望这清楚地解释我正在尝试做什么,如果不要求澄清。在此先感谢您的帮助。

batch-file scripting robocopy
6个回答
4
投票
set "src=C:\Users\me\Documents\a"
set "dest=C:\Users\me\Documents\b"

robocopy "%src%" "%dest%" 

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

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

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


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 ^”。所以顺便说一下 - 你会继续尝试,直到有效。故障排除技术:对新定义的变量进行Echos然后暂停,可以检查拼写错误和错误引号。最后的暂停使您有足够的时间来读取错误代码,如果有的话。我遇到的另一件事是无意中插入了一个不可打印的字符来代替用引号括起来的路径中的空格。 RoboCopy是非常强大的,非常值得偶尔修补敏捷的语法。


1
投票

看起来像一个老问题,但我今天遇到了这个问题并通过使用set斜杠的双斜线解决了它:

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

robocopy %src% %dest%

0
投票

试试这种方式

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

robocopy %src% %dest% /E

/ E - 用于复制包含空子文件夹的子文件夹


0
投票

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

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

robocopy.exe %src% %dest%

你忘了把.exe


-2
投票

老兄尝试XCOPY命令它肯定会起作用!

例:

xcopy“C:\ Users \ me \ Documents \ a”“C:\ Users \ me \ Documents \ b”

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

希望能帮助到你! :d

© www.soinside.com 2019 - 2024. All rights reserved.