Jak porównać foldery w systemie Windows 7

4

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.

happybuddha
źródło
skrypt PowerShell?
dziwny piechur
@strangewalker Czy to jest gotowe?
happybuddha,
tak. choć napisanie skryptu dla osoby bez doświadczenia może być trudne, jego możliwości są niemal nieograniczone
dziwny piechur
Jeśli chcesz poeksperymentować z PowerShellem, oto temat z podobnym pytaniem stackoverflow.com/questions/6526441/…
dziwny piechur
@strangewalker czy potrafisz batem? A może wiesz, gdzie są one dostępne dla każdego? Powinieneś także zrobić z tego odpowiedź. To pomaga i będę głosować
happybuddha,

Odpowiedzi:

13

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 :)

Foldery w przykładzie Polecenia i wynik

Aby porównać zawartość, użyj: compare-object (get-content a.text)(get-content b.txt)i tak dalej

Iris Classon
źródło
2

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.

Peter
źródło
Dziękuję za odpowiedź. Czy w systemie Windows 7 jest dostępna funkcja OOTB? Nie mogę zainstalować niczego na tym komputerze, nad którym pracuję.
happybuddha,
1
Narzędzia Cygwin można również uruchomić bez instalacji, choć wymaga to trochę pracy. Jeśli masz szczęście, jest też taka sama sytuacja, jak w przypadku funkcji „Porównaj”. Najprostszym rozwiązaniem jest zainstalowanie tego w domu i skopiowanie folderów na pendrive. Upewnij się, że nie robisz czegoś sprzecznego z lokalną regulacją sieci, nie mogłem bardzo długo spać dobrze, jeśli straciłeś pracę, ponieważ moje rady :)
peterh
1
@happybuddha Pobierz inny program, na przykład WinDiff, WinMerge lub podobny. Skopiuj go do udziału dostępnego dla tego urządzenia w sieci. Wykonaj to stamtąd. \\ myserver \ myshare \ windiff.exe localfolder1 localfolder2
Mark Allen
Oto kolejny głos na BeyondCompare.
Daniel R. Hicks
1

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.

frozenkoi
źródło
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.
Adrian Pronk
ah tak, masz absolutną rację.
frozenkoi
1

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.

Allan Xu
źródło