批处理脚本按原样复制符号链接但不覆盖源(如果已存在)

时间:2012-07-02 12:55:48

标签: windows batch-file copy robocopy

我尝试过Fastcopy和Robocopy,两者似乎都可以进行其中一种操作,但不能同时进行。

对于像(复制前)

这样的文件
D:\SYMLINKSOURCE\file1 <<symlink from D:\Source\file1 **edit
D:\SYMLINKSOURCE\file2 <<symlink from D:\Source\file1 **edit

D:\DESTINATIONxx\file2 <<not a symlink

我想将D:\SYMLINKSOURCE\*复制到D:\DESTINATIONxx,但不要覆盖D:\DESTINATIONxx\file1,以便在复制后看起来像

(AFTER COPYING)
D:\SYMLINKSOURCE\file1 <<symlink from D:\Source\file1
D:\SYMLINKSOURCE\file2 <<symlink from D:\Source\file2

D:\DESTINATIONxx\file1 <<symlink from D:\Source\file1
D:\DESTINATIONxx\file2 <<not a symlink

我尝试过不覆盖,但它不会保留符号链接,而是复制已解析的文件Copy files without overwrite

robocopy "D:\SYMLINKSOURCE" "D:\DESTINATION" /E /XC /XN /XO

(AFTER COPYING)
D:\SYMLINKSOURCE\file1 <<symlink from D:\Source\file1
D:\SYMLINKSOURCE\file2 <<symlink from D:\Source\file2

D:\DESTINATIONxx\file1 <<not a symlink < i wanted this as symlink
D:\DESTINATIONxx\file2 <<not a symlink

并添加/ SL以保留符号链接覆盖所有内容。

robocopy "D:\SYMLINKSOURCE" "D:\DESTINATION" /E /XC /XN /XO /SL

(AFTER COPYING)
D:\SYMLINKSOURCE\file1 <<symlink from D:\Source\file1
D:\SYMLINKSOURCE\file2 <<symlink from D:\Source\file2

D:\DESTINATIONxx\file1 <<symlink from D:\Source\file1
D:\DESTINATIONxx\file2 <<symlink from D:\Source\file1 < i did not want this overwritten

有什么方法可以达到我的目的吗?

1 个答案:

答案 0 :(得分:1)

我可以看到如何执行此操作的唯一方法是首先使用两个单独的robocopy作为非链接文件,然后使用要作为链接复制的链接文件。假设普通文件多于链接,您可以运行:

robocopy "D:\SYMLINKSOURCE" "D:\DESTINATION" /E /XC /XN /XO

然后通过单独命名(或使用某些命名约定,如sl-file1和美国sl*模式)来复制实际链接,从而修复错误覆盖的链接:

robocopy "D:\SYMLINKSOURCE\file1" "D:\DESTINATION" /E /XC /XN /XO /SL