使用Windows命令复制2个文件夹和第3个文件夹之间的文件差异

时间:2018-01-04 02:48:20

标签: powershell batch-file xcopy robocopy

我已经看到了将两个文件夹的差异复制到本网站上的第三个文件夹的主题,而其他人却找不到一个适合我的建议解决方案。我想使用Robocopy,Xcopy或powershell。

文件夹名为当前已更改已移至当前是当前的生产文件夹。它包含各种文件,但我要复制和移动的文件都是.txt文件。

我已经想出如何使用/ XO开关使用Robocopy来复制差异较大的文件,或者从当前已更改的新文件。我想在第1步中每天覆盖当前更改的文件。

但是对于第2步,我只需要将新复制到已更改的内容复制到第三个文件夹已移动,最终将被压缩并将FTP转换为其他文件夹服务器。 已移动文件夹应仅包含增量文件。我知道/ MOV命令,但我无法弄清楚如何将它用于我的目的。有关如何编写此脚本的任何建议吗?

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\current"
SET "destdir=U:\changed"
SET "targetdir=U:\moved"
xcopy /L /y /d "%sourcedir%\*.txt" "%destdir%\" |findstr /v /e "File(s)"
FOR /f "delims=" %%a IN (
 'xcopy /L /y /d "%sourcedir%\*.txt" "%destdir%\" ^|findstr /v /e "File(s)"'
 ) DO (
 ECHO %%a
 COPY /y "%%a" "%targetdir%\"
 COPY /y "%%a" "%destdir%\"
)

GOTO :EOF

您需要更改sourcedirdestdirtargetdir的设置以适合您的具体情况(这些只是我使用的标准名称)。

>nul附加到COPY命令以禁止报告消息(例如1 file copied

文件名的echo显然是可选的。

逐行处理xcopy /L /D /Y的输出到%%a/L选项生成列表但实际上并不复制文件。 /Y强制在没有提示的情况下覆盖,并与/L一起确保xcopy完成而无需用户操作(响应overwrite?提示)。应复制/D指定“新的或更新的”文件。

findstr过滤器会查找以/v结尾的行/e 而不是 File(s) - 这是{{的最后一行1}}输出。

xcopy /L因此具有复制的每个文件的名称,因此两个%%a命令将新文件复制到两个所需目标目录中的每一个。 / p>