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