CMD用robocopy 怎样不覆盖已存在的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMD用robocopy 怎样不覆盖已存在的文件?相关的知识,希望对你有一定的参考价值。

robocopy 转移文件时遇到问题终止了一下,再次复制,怎么才能不覆盖不复制之前已经复制过的已存在的文件呢?自动跳过已存在文件

你说的情况用copy或xcopy就支持啊, 命令后面加 /n 即可

robocopy的话
http://blog.chinaunix.net/uid-26782198-id-3265496.html
可以参考这个

具体要求是整理出:txt文本文件、Word文档、JPG、BMP、TIF图像。他倒是说得简单,我面对的可是一个有上百个子文件夹至少5层目录结构的超级复杂文件目录树。
好吧,为了能顺利完成,放第一招:
第一招 我想咋复制就咋复制
robocopy D:\Document H:\Project *.txt *.doc *.jpg *.bmp *.tif /s
说明:
参数"/s"的作用是“除了空文件夹以外的所有子目录”。若要将文件夹下的所有文件(包括空文件夹)全部复制到目标文件夹,则上述命令应改为:
robocopy D:\Document E:\Home /e
此处参数"/e"的表示所有子目录(包括空文件夹)。
第一个任务很顺利就完成,经理把我叫到办公室,对我的执行效率表示出非常满意,我长出一口气,气刚出到一半,经理就开口了:“还要做个项目概览,你去把一二级目录下的内容再单独整理出来,还拷贝到我的U盘里。”我晕……
刚才小试牛刀,现在见招拆招,放第二招:
第二招 复制文件随心所欲
robocopy D:\Document H:\Project *.txt *.doc *.jpg *.bmp *.tif /s /lev:2
说明:
参数"/lev"表示复制的层级,比如指定为2级,则两层目录下的文件会被复制,更多级下面的则会被忽略。
经过一番折腾,经理对我的满意度算是越来越高了,但对于他而言,总是有解决不尽、也永远搞不清的问题,诸如他会在家选择文件之后按下Ctrl+C,然后第二天来公司在公司电脑上猛按Crtl+V。哎,这不,他又有新问题了。经过刚才几次复制,他那弱小的U盘已经经不起更多折腾,肚子塞的满满的,可是还有大批文件需要用U盘拷贝,经理他就挠着头,想啊想,想啊想,终于想出一个办法来,先把不用的文件拷贝到计算机上,再把垃圾文件删除掉!嗯~还真是个好办法,于是乎,他又叫来了我……
同样,怕什么~~~接着放招:
第三招 垃圾文件我可不要
其实实现这个要求很简单,直接在复制的过程中筛选出垃圾文件并且deny掉就好啦~
用如下命令吧:
robocopy H:\Work D:\Work /e /xf *.tmp *.bak
说明:
参数"/xf"意为指定不执行复制操作的文件类型,文件名支持通配符。如果使用参数"/xd",则表示排除指定的文件夹。
又一项任务顺利完成,我哼着小曲回到了自己的办公室,安安稳稳的坐在椅子上听起音乐。一个上午连续被经理所赞赏,那心情叫一个好啊,索性就用音箱吧~动人的旋律不仅飘到我耳朵里,也到了隔壁同事耳朵里,这不,隔壁同事又来了,他表示对我艺术审美很是赞赏,同时,还想拷走我所有音乐文件……
天,我的音乐文件夹有好几个G之大,而他拿来的U盘才有碎碎的2G,这可怎么是好呢~
想来想去,他觉得只好忍痛割爱,不要MV了。只是还有一个问题,如果用文件类型排除,那将非常麻烦,在这种情况下,我选择了以下方法:
第四招 大文件我也不要
robocopy F:\music H:\music /e /max:10000000
说明:
使用参数"/max",可以选择文件大小上限,其单位为byte。如果是"/min",限定了文件大小的下限。两个参数可以同时使用,限制出所需复制的文件大小的范围。
复制指定修改时间的文件
在日常使用中,免不了要通过文件修改时间筛选出最近的文件。如何实现此功能?通过下列命令:
robocopy D:\Document H:\Project /maxage:5
此条命令的意思为将D:Document下修改时间在5天内的文件复制到H:Project下。
参数"/maxage"表示距离今天最远的修改时间,凡是修改时间比这个限制还要早的那些文件都不会被复制。参数"/maxage"可以接受的字符有数字,或者是日期,表示天数时数字要小于1900,表示日期时需要使用"YYYYMMDD"格式。另外一个与之相对应的参数是"/minage",表示距离今天最近的修改时间限制,比这个时间新的文件将不被复制。
因此,我们在实用环境下可以利用"/maxage"和"/minage"来共同限制时间范围。如下例:
robocopy D:\Document H:\Project /maxage:5 /minage:1
此命令则将欲复制的文件范围限定在修改时间在除今天意外的5天以内(是不是有点绕口……我实在描述不清楚了,各位看官请意会吧)。
完全拷贝
在Windows默认的复制粘贴下,如果已存在一个同名文件夹,系统会进行增量复制,而不会进行文件夹的替换操作。如果我们需要使目标文件夹与源文件夹完全相同,也就是说在复制的同时也删除在目标文件夹里存在但源文件夹里并没有的文件。则需要使用以下命令:
robocopy D:\Document H:\Project /mir
参数"/mir"的作用等同于"/purge /e","/purge"表示清理目标文件夹内有而源文件夹里没有的文件和文件夹。通过这个命令,能保证源文件夹和目标文件夹在结构与内容上完全相同。此参数对于创建镜像备份时是非常有用的。
移动文件
需要移动文件夹,也就是剪贴,需要使用另外两个参数,先看下例:
robocopy D:\Document H:\Project /move /e
参数"/move"意为移动,而"/e"则表示复制所有子目录包括空文件夹(这一点上篇文章有讲)。
只拷贝文档结构
有时我们只需要拷贝一个多级目录的目录树,或者说只需要它的结构,而不需要它的内容,参考如下命令:
robocopy c:\windows /s /create c:\empty\windows
这样,我们就创建了整个Windows文件夹的目录结构。其中,使用了"/creat"参数,此参数作用即为生成空的文件结构。
还有另外一种剑走偏锋的实现方法:
robocopy c:\windows c:\empty\windows /e /lev:5 /minage:19000101
这是使用了普通的复制方法,指定5层目录,但是却限制了一个机器上不可能有的一个文件修改日期。这样,robocopy就只会拷贝走目录结构,因无文件符合其修改时间限制,因而不会有文件被复制。
不复制隐藏文件
个别情况下文件夹中存在隐私内容,在复制的同时又希望被ignore,因为robocopy支持属性操作,所以只需调用相关参数即可。见下例:
robocopy D:\Photo H:\Photo /e /xa:h
参数"/xa:h"表示将具有隐藏属性的排除出欲复制的范围,与之相对应的是参数"/ia",表示只复制包括指定属性的文件。
可用的属性有;R只读、A存档、S系统、H隐藏等。
robocopy C:\windows F:\WindowsSysFile /ia:rs
此命令只会将具有只读属性的系统文件复制,而不会操作其他文件。
上文说道,robocopy具有对属性操作的能力,因此,在复制的同时也可以指定文件属性。
使用参数"/A+"与"/A-",功能分别是将给定的属性添加到复制文件,以及,从复制文件中删除给定的属性。
例如:
robocopy C:\windows F:\WindowsSysFile /e /A-:rsh
这样,不仅将所有文件进行了复制,也删除了诸如只读、系统、隐藏等属性,方便了我们在复制之后对文件进行操作和编辑等。
参考技术A 用/XN
/XC :: 排除已更改的文件。
/XN :: 排除较新的文件。
/XO :: 排除较旧的文件。
/XX :: 排除多余的文件和目录。
/XL :: 排除孤立的文件和目录。
/IS :: 包含相同文件。
/IT :: 包含已调整的文件。
F:\>robocopy F:\Movie F:\Movie\2 test1.txt /xn

-------------------------------------------------------------------------------
ROBOCOPY :: Windows 的可靠文件复制
-------------------------------------------------------------------------------

开始时间: 2020年7月2日 17:23:03
源: F:\Movie\
目标: F:\Movie\2\

文件: test1.txt

选项: /DCOPY:DA /COPY:DAT /XN /R:1000000 /W:30

------------------------------------------------------------------------------

1 F:\Movie\

------------------------------------------------------------------------------

总数 复制 跳过 不匹配 失败 其他
目录: 1 0 1 0 0 0
文件: 1 0 1 0 0 0
字节: 23 0 23 0 0 0
时间: 0:00:00 0:00:00 0:00:00 0:00:00
结束时间: 2020年7月2日 17:23:03

robocopy 将选项视为文件

【中文标题】robocopy 将选项视为文件【英文标题】:robocopy treats options as files 【发布时间】:2017-01-25 23:04:38 【问题描述】:

当我使用 robocopy 复制文件并使用选项 /IS 覆盖(如果已存在于目的地)时。它将选项视为另一个文件,如日志所示:ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"

任何人都知道如何在 Windows 中复制文件,同时覆盖目标位置的文件。

$ robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" /IS

   ROBOCOPY     ::     Robust File Copy for Windows

  Started : Sat Sep 17 18:00:05 2016

   Source - Z:\ubuntushare\
     Dest - C:\Natlink\Natlink\MacroSystem\

    Files : _git.py

  Options : /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"

       Simple Usage :: ROBOCOPY source destination /MIR

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               /MIR :: Mirror a complete directory tree.

    For more usage information run ROBOCOPY /?


****  /MIR can DELETE files as well as copy them !

pri@pri-PC MINGW64 /c/NatLink/NatLink/MacroSystem

【问题讨论】:

【参考方案1】:

已编辑 2016/09/19 - 已测试且有效

来自MinGW Posix path conversion

以 2 或更多 / 开头的参数被视为转义 Windows 样式开关,将通过前导 / 删除和所有 \ 改为/。

除了如果/的前导块后面有/,则该参数被认为是UNC路径,而前导/不是 已删除。

注意:这只是完整列表的摘录。在 windows 中使用 git bash shell 时最好阅读完整列表

所以,在这种情况下,解决方案是在 switch 中将正斜杠加倍

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" //IS

【讨论】:

哇。其中一些规则是奇怪的。 @HarryJohnston,我不得不同意,但我也很高兴有人想到了两个系统的共存【参考方案2】:

ROBOCOPY 使用 Windows 样式的正斜杠 / 来指定命令行选项。这不适用于 Git-bash 或类似终端,因为斜杠在 Linux 和类似环境中被解释为 root 路径。

shell 将/something 解释为根文件夹C:\Program Files\Git\ 下的文件something,而不是命令行选项。所以这最终意味着 "C:\Program Files\Git\something" 不存在。

即使尝试使用帮助选项 /? 也会失败并出现类似错误。

使用 linux/unix/mac 标准 -opt 而不是 /opt Robocopy 允许使用破折号/连字符 - 来指定选项。例如robocopy -? 工作并显示使用信息/帮助。这样做:

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" -IS

【讨论】:

这取决于robocopy接受-而不是/这一事实。肯定有更通用的方法来告诉 shell 不要乱用命令行? @HarryJohnston +1 不知道 Robocopy 明确允许它并因此工作。将编辑我的答案。所以我假设所有使用/opts 的Windows 命令都会导致这个错误?令人惊讶的是,用 \/ 转义 / 也不起作用。

以上是关于CMD用robocopy 怎样不覆盖已存在的文件?的主要内容,如果未能解决你的问题,请参考以下文章

win7下使用CMD里的robocopy复制文件,8-128 用的线程越多就越快吗?

如何强制 Robocopy 覆盖文件?

关于copy,xcopy,robocopy三者都是复制,但作用是啥,不太清楚?

怎样让win10复制时出错不要停下了,自动跳过,或者有能实现的工具?

我系统是win7的 为啥我在cmd里输入robocopy提示我不是内部或外部命令?

asp.net如何避免把上传的文件覆盖掉