使用 Windows 命令复制两个文件夹和第三个文件夹之间的文件差异
Copy file difference between 2 folders and a third folder using Windows commands
我在本网站和其他网站上看到了将两个文件夹的差异复制到第三个文件夹的主题,但我找不到适合我的建议解决方案。我想使用 Robocopy、Xcopy 或 powershell。
这些文件夹将被命名为 current、Changed 和 moved。
Current 是当前的制作文件夹。它包含各种文件,但我要复制和移动的文件都是.txt文件。
我已经弄清楚如何使用 Robocopy 使用 /XO 开关来复制有差异的文件或新文件,从 current 到 changed。我想覆盖当前步骤 1 中每天更改的文件。
但是对于第 2 步,我只需要将新复制到 changed 的内容复制到第三个文件夹 moved 最终将是压缩并 FTP' 到不同的服务器。 moved 文件夹应该只包含增量文件。我知道 /MOV 命令,但我不知道如何将它用于我的目的。有什么关于如何编写脚本的建议吗?
@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
您需要更改 sourcedir
、destdir
和 targetdir
的设置以适合您的情况(这些只是我使用的标准名称)。
将 >nul
附加到 COPY
命令以禁止报告消息(例如 1 file copied
)
文件名的echo
显然是可选的
逐行处理 xcopy /L /D /Y
的输出到 %%a
。 /L
选项生成一个列表但实际上并不复制文件。 /Y
在没有提示的情况下强制覆盖,并与 /L
结合确保 xcopy
完成而无需用户操作(响应 overwrite?
提示)。 /D
指定应复制 "new or newer" 个文件。
findstr
过滤器查找行 /v
not /e
以字符串 File(s)
结尾 - 这是最后一个xcopy /L
输出行。
%%a
因此具有 应该 复制的每个文件的名称,因此两个 copy
命令将新文件复制到两个文件中的每一个所需的目标目录。
我在本网站和其他网站上看到了将两个文件夹的差异复制到第三个文件夹的主题,但我找不到适合我的建议解决方案。我想使用 Robocopy、Xcopy 或 powershell。
这些文件夹将被命名为 current、Changed 和 moved。 Current 是当前的制作文件夹。它包含各种文件,但我要复制和移动的文件都是.txt文件。
我已经弄清楚如何使用 Robocopy 使用 /XO 开关来复制有差异的文件或新文件,从 current 到 changed。我想覆盖当前步骤 1 中每天更改的文件。
但是对于第 2 步,我只需要将新复制到 changed 的内容复制到第三个文件夹 moved 最终将是压缩并 FTP' 到不同的服务器。 moved 文件夹应该只包含增量文件。我知道 /MOV 命令,但我不知道如何将它用于我的目的。有什么关于如何编写脚本的建议吗?
@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
您需要更改 sourcedir
、destdir
和 targetdir
的设置以适合您的情况(这些只是我使用的标准名称)。
将 >nul
附加到 COPY
命令以禁止报告消息(例如 1 file copied
)
文件名的echo
显然是可选的
逐行处理 xcopy /L /D /Y
的输出到 %%a
。 /L
选项生成一个列表但实际上并不复制文件。 /Y
在没有提示的情况下强制覆盖,并与 /L
结合确保 xcopy
完成而无需用户操作(响应 overwrite?
提示)。 /D
指定应复制 "new or newer" 个文件。
findstr
过滤器查找行 /v
not /e
以字符串 File(s)
结尾 - 这是最后一个xcopy /L
输出行。
%%a
因此具有 应该 复制的每个文件的名称,因此两个 copy
命令将新文件复制到两个文件中的每一个所需的目标目录。