Czy istnieje gotowy sposób na porównanie dwóch folderów w systemie Windows 7? Porównanie powinno pokazywać różnice pod względem folderów podkatalogów i plików podkatalogów.
Czy istnieje gotowy sposób na porównanie dwóch folderów w systemie Windows 7? Porównanie powinno pokazywać różnice pod względem folderów podkatalogów i plików podkatalogów.
Odpowiedzi:
Nie jestem profesjonalistą PowerShell, ale dałoby ci to, które pliki i foldery istnieją w jednym folderze, ale nie w drugim.
$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 '=>'}
To daje:
InputObject SideIndicator
----------- -------------
test1a =>
test.txt =>
Możesz oczywiście zrezygnować z filtrowania i uzyskać:
$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 <=
Nie wiem, czy to jest to, czego szukasz, ale może to da ci początek :)

Aby porównać zawartość, użyj:
compare-object (get-content a.text)(get-content b.txt)i tak dalej
Istnieje dobre narzędzie uniksowe o nazwie diff, które można zainstalować z Cygwina.
W przypadku wygranej istnieje narzędzie GUI o nazwie beyondCompare.
Możesz utworzyć plik wsadowy, który tworzy dwa tymczasowe pliki tekstowe zawierające strukturę katalogów, a następnie porównaj te pliki tymczasowe fc.
Coś w stylu (i dostosuj do preferencji):
dir %1 /s /b /a /ong > temp1.txt
dir %2 /s /b /a /ong > temp2.txt
fc temp1.txt temp2.txt
Argumenty dla polecenia dir są następujące:
/srekurencja w folderach potomnych
/bnie pokazuje szczegółów, możesz pominąć to
/ongsortowanie według rosnącej nazwy, najpierw katalogi
Pamiętaj również, aby dostosować argumenty do możliwych spacji
EDYCJA: jak zauważono w komentarzach, będziemy musieli pozbyć się prefiksu katalogu z pliku tekstowego listy plików. Można to zrobić za pomocą pliku wsadowego, takiego jak:
@echo off
setlocal EnableDelayedExpansion
for /F "delims==" %%a in (%1) do @(
set CURR_LINE=%%a
@echo !CURR_LINE:~%2!
)
endlocal
używany jako unprefix text_file.txt prefix_length. Na przykład unprefix temp1.txt 5wyświetli zawartość temp1.txt bez pierwszych 5 znaków w każdym wierszu.
dir /s /bzawsze wyświetla ścieżkę bezwzględną, więc każda linia będzie miała inny prefiks ścieżki, co spowoduje fczgłoszenie każdej linii. Będziesz potrzebował narzędzia do usunięcia przedrostka ścieżki przed porównaniem.
Używam do tego FreeCommander (klon Norton Commander). Zapewnia funkcję „Synchronizuj foldery”, która pozwala porównać dwa foldery i opcjonalnie je zsynchronizować. Opcje porównania obejmują „Według CRC”, „Według daty”, „Według treści”, Podfoldery i wiele innych. Jest bardzo potężny i pomógł mi wiele razy doskonale zrobić to samo, o co prosiłeś.
Ogólnie FreeCommander jest bardzo potężnym narzędziem. Inną często używaną funkcją jest wyszukiwanie za pomocą plików i folderów.