4

Существует ли готовый способ сравнения двух папок в Windows 7? Сравнение должно показать различия с точки зрения папок подкаталогов и файлов подкаталогов.

4 ответа4

13

Я не профессионал powershell, но это даст вам информацию о том, какие файлы и папки существуют в одной папке, а не в другой.

$test1 = get-childitem -path C:\Users\IrisDaniela\Documents\test1 -recurse
$test2 = get-childitem -path C:\Users\IrisDaniela\Documents\test2 -recurse
compare-object $test2 $test1 | Where {$_.SideIndicator -eq '=>'}

Это дает:

InputObject                                                 SideIndicator
-----------                                                 -------------
test1a                                                      =>
test.txt                                                    =>

Вы также можете оставить фильтрацию и получить:

$test1 = get-childitem -path C:\Users\IrisDaniela\Documents\test1 -recurse
$test2 = get-childitem -path C:\Users\IrisDaniela\Documents\test2 -recurse
compare-object $test2 $test1

InputObject                                                 SideIndicator
-----------                                                 -------------
test1a                                                      =>
test.txt                                                    =>
test2b                                                      <=

Не знаю, если это то, что вы ищете, но, возможно, это дает вам начало :)

Папки в примере Команды и результат

Для сравнения содержимого используйте:compare-object (get-content a.text)(get-content b.txt) и т.д.

2

Существует хороший инструмент Unix под названием diff, который вы можете установить из cygwin.

На win есть инструмент с графическим интерфейсом, который называется за пределами.

1

Вы можете создать пакетный файл, который создает два временных текстовых файла, которые содержат структуру каталогов, а затем сравнить эти временные файлы с fc .

Что-то вроде (и с учетом предпочтений):

dir %1 /s /b /a /ong > temp1.txt
dir %2 /s /b /a /ong > temp2.txt
fc temp1.txt temp2.txt

Аргументы для команды dir:/s recurse в дочерние папки /b не отображают детали, вы можете пропустить эту сортировку может быть /ong по возрастанию имени, сначала каталоги

Кроме того, не забудьте настроить возможные пробелы в аргументах

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

@echo off
setlocal EnableDelayedExpansion

for /F "delims==" %%a in (%1) do @(
    set CURR_LINE=%%a
    @echo !CURR_LINE:~%2!
)

endlocal

используется в качестве unprefix text_file.txt prefix_length . Так, например, unprefix temp1.txt 5 будет выводить содержимое temp1.txt без первых 5 символов каждой строки.

1

Я использую FreeCommander (клон Norton Commander), чтобы сделать это. Он предоставляет функцию "Синхронизировать папки", которая позволяет сравнивать две папки и при необходимости синхронизировать их. Варианты сравнения включают "По CRC", "По дате", "По содержимому", "Подкаталоги" и другие. Это очень мощно и помогло мне много раз идеально сделать то же самое, что вы просили.

Вообще, FreeCommander очень мощный инструмент. Другая функция, которую я часто использую, - это поиск по файлам и папкам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .