批处理文件,用于比较两个文件夹中的相同文件

时间:2014-04-17 00:02:58

标签: batch-file

我想创建一个批处理文件,将两个文件夹与同一组文件进行比较,并将大小不同的文件从一个文件夹复制到另一个文件夹。我尝试将以下问题的答案作为起点进行调整,但即使这样也行不通。

@echo off
Set folder1="C:\folder1"
Set folder2="C:\folder2"
Cd /D "%folder1%"
For %%a in (*.*) do (
   For %%b in ("%folder2%\%%a") do (
      If "%%~Za" neq "%%~Zb" echo Different file size in %%a
   )
)

UPDATE1: 我弄清楚上面例子中出了什么问题;它是set folder命令中目录周围的引号。以下工作原理:

@echo off
Set folder1=C:\folder1
Set folder2=C:\folder2
Cd /D "%folder1%"
For %%a in (*.*) do (
   For %%b in ("%folder2%\%%a") do (
      If %%~za neq %%~zb echo Different file size %%a
   )
)

UPDATE2: 所以这最终做了我想要的(将两个文件夹与同一组文件进行比较,并将大小不同的文件从一个文件夹复制到另一个文件夹):

@echo off
Set folder1=C:\folder1
Set folder2=C:\folder2
Cd /D "%folder1%"
For %%a in (*.*) do (
   For %%b in ("%folder2%\%%a") do (
      If %%~za neq %%~zb xcopy "%folder1%\%%a" "%folder2%" /y
   )
)

1 个答案:

答案 0 :(得分:0)

这样做的经典方法是

xcopy /L /y /d "directory1\*" "directory2"

/L列出要复制的文件。 /d实际上说“如果第一个参数中的源文件晚于第二个参数中的文件”,这可能不是您想要的。 /y会阻止提示过度写入(使用/L开关,只创建一个列表,但仍然......)

源中存在但未存在于目标中的文件将被复制到目标(或使用/L开关时列出)

删除/L开关以实际执行复制。

添加/s以重复源的所有子目录。