Существует ли готовый способ сравнения двух папок в Windows 7? Сравнение должно показать различия с точки зрения папок подкаталогов и файлов подкаталогов.
4 ответа
Я не профессионал 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)
и т.д.
Существует хороший инструмент Unix под названием diff, который вы можете установить из cygwin.
На win есть инструмент с графическим интерфейсом, который называется за пределами.
Вы можете создать пакетный файл, который создает два временных текстовых файла, которые содержат структуру каталогов, а затем сравнить эти временные файлы с 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 символов каждой строки.
Я использую FreeCommander (клон Norton Commander), чтобы сделать это. Он предоставляет функцию "Синхронизировать папки", которая позволяет сравнивать две папки и при необходимости синхронизировать их. Варианты сравнения включают "По CRC", "По дате", "По содержимому", "Подкаталоги" и другие. Это очень мощно и помогло мне много раз идеально сделать то же самое, что вы просили.
Вообще, FreeCommander очень мощный инструмент. Другая функция, которую я часто использую, - это поиск по файлам и папкам.