批量复制和移动文件而不覆盖

批量复制和移动文件而不覆盖

我正在尝试创建一个批处理文件(在后台运行),它将复制单个文件而不覆盖目标中具有相同名称的任何文件,然后移动该文件,如果目标中存在具有相同名称的文件,则再次不覆盖?

我现在正在使用它,但它正在覆盖。

copy %1 dest
move %1 dest

答案1

请尝试一下。它适用于单个文件。

echo N | 复制 /-Y 文件1 文件2

echo N | 移动/-Y 文件1 文件2

有趣的是,它似乎也适用于通配符。我在 x64 Windows 7 上进行了测试。

答案2

我不清楚您所说的移动刚刚复制的同一个文件是什么意思,但是为了测试文件是否存在,请在批处理脚本中使用“IF”语句,如下所示。(我将在下文中更详细地解释 %~。)

IF EXIST %~dp2%~nx1 (echo file exists) ELSE (
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV>>testing.txt)

以下内容适用于 Windows 7、Windows 8、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012。

(要获得 XP,您必须从资源包中获取,但是哦不,该宝石的使用寿命只剩下 30 天了 :) )

以下代码仅当目标文件不存在时才将文件从源目录复制到目标目录。

robocopy source_path dest_path filename /XN /XO

添加/MOV 将移动该文件。

如果您想使用参数,命令将是这样的:

copyscript.bat C:\Dir1\filename.ext D:\path2\

copyscript.bat 看起来是这样的:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO

如果您想将输出发送到日志,请添加 >>logfile.txt,如下所示:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO>>logfile.txt 

如果您想移动文件而不是复制,请执行以下操作:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV 
  • %~dp1 相当于第一个参数的目录和路径
  • %~dp2 相当于第二个参数的目录和路径
  • %~nx1 相当于第一个参数的文件名和扩展名
  • /XN 复制期间排除较新的文件
  • /XO 复制期间排除较旧的文件
  • /MOV 移动文件而不只是复制
  • 将输出结果附加到文件而不是 cmd 窗口(如果每次都想覆盖日志,请仅使用一个 >)

  • 默认情况下,如果日期时间戳相同,robocopy 不会覆盖文件。

Simon Sheppard 的网站是一个很好的批处理脚本资源,参数的语法在这里。 http://ss64.com/nt/syntax-args.html

微软的 robocopy 信息在这里http://technet.microsoft.com/en-us/library/cc733145.aspx

相关内容