【问题标题】:Copy file difference between 2 folders and a third folder using Windows commands使用 Windows 命令复制 2 个文件夹和第三个文件夹之间的文件差异
【发布时间】:2018-01-04 02:48:19
【问题描述】:

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

这些文件夹将被称为 currentChangedmovedCurrent 是当前的生产文件夹。它包含各种文件,但我要复制和移动的文件都是 .txt 文件。

我已经知道如何使用 Robocopy 使用 /XO 开关来复制不同的文件或从 当前已更改 的新文件。我想在步骤 1 中覆盖每天更改的当前文件。

但是,对于第 2 步,我只需要将新复制到 changed 的内容复制到第三个文件夹 moved,该文件夹最终将被压缩并通过 FTP 传输到另一个文件夹服务器。 moved 文件夹应该只包含增量文件。我知道 /MOV 命令,但我不知道如何将它用于我的目的。有什么建议如何编写脚本吗?

【问题讨论】:

  • 听起来你在做手动版本控制。为什么不使用 Git 之类的东西?我问是因为你特别提到你只想要三角洲。
  • 我听说过 Git,但不是很熟悉。我会对此进行一些研究。

标签: powershell batch-file xcopy robocopy


【解决方案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 not /e 以字符串 File(s) 结尾 - 这是 xcopy /L 输出的最后一行。

%%a 因此具有应该复制的每个文件的名称,因此两个copy 命令将新文件复制到两个所需目标目录中的每一个。

【讨论】:

  • 如何将结果保存到已移动文件夹中的文本文件中?
  • echo %%a>>"%targetdir%\textfilename.txt" 在循环内
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2011-01-28
  • 2018-08-13
  • 1970-01-01
相关资源
最近更新 更多