Пакетный файл для сравнения 2 каталогов и получения имен файлов, которые отличаются [DOS] - PullRequest
2 голосов
/ 22 ноября 2010

У меня будет 2 каталога, папка 1 со списком заданных файлов и папка 2 с тем же списком заданных файлов, но с большим количеством файлов.Мне нужно получить "другие файлы" для folder2
Существует ли что-то вроде сравнения файлов (fc) для каталогов, чтобы вернуть различия?

РЕДАКТИРОВАТЬ В настоящее время я создаю 2 списка, используя dir, а затем выполняю сравнение файлов.Теперь мне просто нужно проанализировать вывод fc, чтобы он содержал только имена файлов.

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

Ответы [ 2 ]

5 голосов
/ 22 ноября 2010

Пакетный файл

@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>
2 голосов
/ 22 ноября 2010

Сначала выполните dir /s для обеих папок. Затем используйте fc /a для сравнения результатов.

Для чего-то лучшего (в зависимости от ваших потребностей) вам понадобится специализированный инструмент. Например, посмотрите на Windiff или WinMerge.

...