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.


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


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.