windows - 比较两个文件夹及其子文件夹批处理文件

标签 windows batch-file

我有两个包含所有相同文件和子文件夹的文件夹,但每个文件中的内容可能已更改。我想编写一个批处理文件来搜索每个文件并查找任何差异。什么是我想做的事情的最佳工具?

最佳答案

不需要批处理文件。一个 FC 命令可以做你想做的事:

fc folder1\* folder2\*

如果需要,您可以更具体地指定第一个文件夹中的文件掩码。例如 folder1\*.txt

该命令将报告文件夹 1 中存在但文件夹 2 中丢失的文件。 folder2 中的额外文件将被忽略。

FC 命令有很多选项。在命令提示符下输入 HELP FCFC/? 以获取更多信息。

编辑

扩展解决方案以支持子文件夹有点棘手。使用 FOR/R 很容易迭代给定根目录的文件夹层次结构。问题是获取相对路径,以便层次结构可以应用于另一个根。

最简单的解决方案是改用 FORFILES,因为它直接支持相对路径。但是 FORFILES 是... S L O W :/

此时,批处理文件就有意义了:

@echo off
setlocal
set "folder1=c:\path\To\Folder1\Root"
set "folder2=d:\path\To\Folder2\Root"
set "fileMask=*"

for /f "delims=" %%F in (
  'echo "."^&forfiles /s /p "%folder1%" /m "%fileMask%" /c "cmd /c if @isdir==TRUE echo @relpath"'
) do fc "%folder1%\%%~F\%fileMask%" "%folder2%\%%~F\*"

关于windows - 比较两个文件夹及其子文件夹批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599576/

相关文章:

windows - 如何从 forfiles 变量 fname 中删除引号

batch-file - 批处理编程=当我回显时,如何使字符显示缓慢,就像您正在键入它们一样

python - 停止键盘中断到达批处理文件处理器

windows - 用于拆分 .csv 文件的批处理文件

c++ - 寻找一个非常准确的增量时间计数器。想要在 blitting 游戏中限制帧数

使用条件 "IF statement"相当于 bash 脚本的 Windows 批处理

windows - 在 Windows 命令行上检查主机可达性

linux - 将 Linux 代码转换为批处理文件格式以在 MS-DOS 中运行

c++ - DuplicateHandle 的代价

windows - 无法从 Windows 连接到我的 git 存储库到 linux