Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Batch file 批处理文件以比较两个文件夹中的相同文件_Batch File - Fatal编程技术网

Batch file 批处理文件以比较两个文件夹中的相同文件

Batch file 批处理文件以比较两个文件夹中的相同文件,batch-file,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 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
   )
)
更新1: 我找出了上面例子中的错误;它是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
   )
)
更新2: 因此,这最终满足了我的要求(将两个文件夹与同一组文件进行比较,并将大小不同的文件从一个文件夹复制到另一个文件夹):


经典的方法是

xcopy /L /y /d "directory1\*" "directory2"
/L
列出了要复制的文件
/d
实际上表示“如果第一个参数中的源文件晚于第二个参数中的文件”,这可能不是您想要的。
/y
可防止出现OVERITE提示(使用
/L
开关,仅创建一个列表,但仍然…)

源中存在但不在目标中的文件将被复制到目标(如果使用了
/L
开关,则列出)

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


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

什么不起作用-你期望发生什么不起作用-你收到了什么错误(如果有)?另一个问题是什么?你能链接到它吗?也许Robocopy也有一个DIFF功能?@fvrghl@unclesmeat它会对文件夹中的每个文件发出“不同的文件大小…”,即使它们大小相同。如果有必要的话,它还会对同一条语句重复两次。我想根据文件大小而不是时间戳进行复制。
xcopy /L /y /d "directory1\*" "directory2"