【问题标题】:Batch file to compare 2 directories and get names of files that are different [dos]用于比较 2 个目录并获取不同文件名的批处理文件 [dos]
【发布时间】:2010-11-22 18:25:50
【问题描述】:

我将有 2 个目录,folder1 有一个设置文件列表,folder2 有相同的设置文件列表但有更多文件。我需要获取文件夹 2 的“其他文件”
是否存在诸如文件比较(fc)之类的目录以返回差异?

编辑我目前正在使用dir 创建 2 个列表,然后进行文件比较。现在我只需要将fc 的输出解析为仅包含文件名。

fc /a "C:\whatever\text1.txt" "C:\whatever\text2.txt" >> "C:\whatever\differences.txt"

【问题讨论】:

  • 我什么都不知道(免费),谷歌搜索并没有带来太多,但您始终可以使用 C#、JAVA 等编写自己的控制台应用程序,并从批处理程序中调用它.这可能就是我会做的。
  • 是的,我知道我可以在 C 中做到这一点,但我已经编写了一些批处理的东西,我只是想找到一个快速的解决方案。
  • 我用批处理语言做了一个(见答案)我忘了说它叫做 dirc.bat 我想知道,你没有可用的 vbscript 或 jscript,因为你使用过windows 标签?
  • 我可以用另一种语言写这个,但这是一个特定的需要。

标签: windows batch-file dos


【解决方案1】:

批处理文件

@echo off
if "%2" == "" GOTO Usage

cd /D %1
if errorlevel 1 goto usage

for %%x in (*.*) do if NOT exist %2\%%x echo missing %2\%%x
cd /D %2
for %%x in (*.*) do if NOT exist %1\%%x echo missing %1\%%x

goto end

:usage
echo Usage %0 dir1 dir2
echo where dir1 and dir2 are full paths
:end

用法

环境:

F:\so>dir /s dir1 dir2
 Volume in drive F is WIN2K
 Volume Serial Number is 921E-EC47

 Directory of F:\so\dir1

2010-11-22  10:33       <DIR>          .
2010-11-22  10:33       <DIR>          ..
2010-11-22  10:33                   13 a
2010-11-22  10:33                   13 b
2010-11-22  10:33                   13 c
               3 File(s)             39 bytes

 Directory of F:\so\dir2

2010-11-22  10:33       <DIR>          .
2010-11-22  10:33       <DIR>          ..
2010-11-22  10:33                   13 a
2010-11-22  10:33                   13 b
2010-11-22  10:33                   13 c
2010-11-22  10:33                   13 D
2010-11-22  10:33                   13 E
               5 File(s)             65 bytes

     Total Files Listed:
               5 File(s)             65 bytes
               2 Dir(s)     219,848,704 bytes free

F:\so>

跑步:

F:\so\dir1>dirc f:\so\dir1 f:\so\dir2

F:\so\dir1>dirc f:\so\dir1 f:\so\dir2
missing f:\so\dir1\D
missing f:\so\dir1\E

F:\so\dir2>

【讨论】:

  • 非常酷的解决方案,但我想知道如何扩展它。我想在 dir1 的目录和子目录中查找所有文件,然后查找文件是否也存在于 dir2 的目录/子目录中。
【解决方案2】:

首先对两个文件夹执行dir /s。然后使用fc /a比较结果。

对于任何比这更好的东西(取决于您的需要),您将需要一个专门的工具。例如看看WindiffWinMerge

【讨论】:

  • 需要,Windows 内置的这个没有什么用处。如果您可以使用 GUI 交互式程序,有很多,但我喜欢 Total Commander 高度可配置的“同步目录”功能。如果它需要在命令行运行,我会使用 cwrsync。如果您只想查看差异而不实际同步,请使用 --dry-run 和 --verbose 切换到 cwrsync。
猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多