Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 复制文件而不覆盖_Windows_Batch File_Xcopy_Robocopy - Fatal编程技术网

Windows 复制文件而不覆盖

Windows 复制文件而不覆盖,windows,batch-file,xcopy,robocopy,Windows,Batch File,Xcopy,Robocopy,我似乎无法在命令行中找到一种方式来说“将所有文件从目录a复制到目录B,但如果该文件已经存在于目录B中,则无论哪个文件较新,都不要覆盖它,也不要提示我。” 我经历了复制、移动、xcopy和robocopy,我能得到的最接近的信息是,你可以告诉robocopy“将A复制到B,但不要用旧文件覆盖新文件”,但这对我不起作用。我查看了xxcopy,但放弃了它,因为我不希望对VisualStudio后期生成事件有第三方依赖,这将需要其他SVN用户安装该工具才能进行生成 我想向VisualStudio2010

我似乎无法在命令行中找到一种方式来说“将所有文件从目录a复制到目录B,但如果该文件已经存在于目录B中,则无论哪个文件较新,都不要覆盖它,也不要提示我。”

我经历了复制、移动、xcopy和robocopy,我能得到的最接近的信息是,你可以告诉robocopy“将A复制到B,但不要用旧文件覆盖新文件”,但这对我不起作用。我查看了xxcopy,但放弃了它,因为我不希望对VisualStudio后期生成事件有第三方依赖,这将需要其他SVN用户安装该工具才能进行生成

我想向VisualStudio2010中的生成后事件添加一个命令行,以便将从新模型对象模板生成的文件分发到它们所属的项目文件夹中,但现有对象的重新生成文件不会覆盖可能编辑的目标文件

由于T4模板会重新生成,所以源文件总是较新的,而且我认为不能可靠地使用“较新”开关

我可以为那些项目使用分部类,但我生成的其他东西不能使用分部类(例如,生成默认的EditorTemplate或DisplayTemplate*.ascx文件)

有人有没有解决过类似的问题

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"
Robocopy或“健壮文件复制”是一个命令行目录复制命令。它已作为Windows资源工具包的一部分从Windows NT 4.0开始提供,并作为Windows Vista、Windows 7和Windows Server 2008的标准功能引入

详细说明(使用汞、HailGallaxar和Andy Schmidt回答):

  • /E
    使Robocopy递归复制子目录, 包括空的
  • /XC
    排除带有 相同的时间戳,但不同 文件大小。机器人复制通常会覆盖这些内容
  • /XN
    排除现有文件 而不是目标中的副本 目录机器人照护 覆盖那些
  • /XO
    排除 现有文件较旧 而不是目标中的副本 目录机器人照护 覆盖那些
由于排除了已更改、较旧和较新的类,Robocopy完全按照原始海报的要求进行操作,而无需加载脚本环境

参考文献:,

下载地点:(链接最后一次验证日期为2016年3月30日)

此处为批量文件格式:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

Belisarius的解决方案是好的

要详细说明这个略显简洁的答案:

  • /E
    使Robocopy递归复制子目录, 包括空的
  • /XC
    排除带有 相同的时间戳,但不同 文件大小。机器人复制通常会覆盖这些内容
  • /XN
    排除现有文件 而不是源中的副本 目录机器人照护 覆盖那些
  • /XO
    排除 现有文件较旧 而不是源中的副本 目录机器人照护 覆盖那些

由于排除了已更改、较旧和较新的类,Robocopy可以完全按照原始海报的要求进行操作,而无需加载脚本环境。

对于尚未安装的系统,可以在此处下载Robocopy。(即Windows Server 2003。)

(安装无需重新启动)

记住设置robocopy exe的路径。您可以通过右键单击“我的电脑”>properties>advanced>“Environment Variables”来执行此操作,然后找到path系统变量并将其添加到末尾:“C:\Program Files\Windows Resource Kits\Tools”或安装它的任何位置。确保保留已经存在的path变量字符串,并仅附加附加路径


设置路径后,可以运行belisarius建议的命令。它工作得很好

我只是想从我自己的测试中澄清一些事情

@汞写道:

  • /XN排除源目录中比副本更新的现有文件。机器人复制通常会覆盖这些内容
  • /XO排除源目录中早于副本的现有文件。机器人复制通常会覆盖这些内容
这实际上是倒退。XN确实“排除较新的”文件,但它排除比目标目录中的副本更新的文件。XO确实“排除旧的”,但它排除比目标目录中的副本旧的文件

当然,您可以一如既往地进行自己的测试。

您可以尝试以下方法:

echo n | copy /-y <SOURCE> <DESTINATION>
echo n | copy/-y

-y
只需在覆盖之前提示,我们就可以将n引导到所有这些问题。因此,这实际上只是复制不存在的文件。:)

使用xcopy有一种奇怪的方法:

echo nnnnnnnnnnn | xcopy /-y source target

只需包含与您正在复制的文件一样多的n,它将回答所有覆盖问题的n。

它不允许我直接评论错误的消息-但让我警告大家,/XN和/XO选项的定义与以前消息中发布的定义相反

“排除较旧/较新文件”选项与RoboCopy日志中显示的信息一致:RoboCopy将迭代源文件,然后报告源文件中的每个文件是比目标文件“旧”还是“新”

因此,/XO将排除较旧的源文件(这是直观的),而不是如本文所述的“比源文件旧”


如果您只想复制新的或更改过的源文件,但避免替换较新的目标文件,那么/XO是正确的选择。

一个简单的方法是使用/MIR选项来镜像这两个目录。基本上,它只会将新文件复制到目标。在下一步中,使用文件夹路径替换源和目标,脚本将搜索任何fi
echo nnnnnnnnnnn | xcopy /-y source target
robocopy <source directory> <destination directory> *.* /MIR
@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"
robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\
robocopy src dst /MIR /XX