Mam archiwum 7zip, które ma kilka plików / folderów, które chcę wyodrębnić do określonego miejsca. Uproszcziłem przykład, aby był minimalny, kompletny i weryfikowalny.
-Nie chcę zachować struktury katalogów, więc używam e
polecenia. Chcę tylko, aby wszystkie pliki (we wszystkich katalogach) znalazły się w jednym miejscu.
-Mam określony katalog wyjściowy, więc też używam -o
.
Ograniczeniem jest to, że nie jestem w stanie zmienić oryginalnego archiwum (wymagałoby to zaangażowania innego zespołu i wolałbym tego nie robić). Idealnie chciałbym, aby po rozpakowaniu archiwum nie było potrzeby usuwania katalogów z twardego kodu.
Problem pojawia się po wyodrębnieniu wszystkiego - mam kilka pustych folderów w katalogu wyjściowym. Czy istnieje sposób, aby 7zip albo usunął te puste katalogi, albo ich nie utworzył?
Mój wiersz polecenia 7zip wygląda następująco:
D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere
Przykładowy plik .zip miałby następującą strukturę:
./A/1.txt
./B/2.txt
./C/3.txt
./D/fileWithNoExt
W moim katalogu wyjściowym chcę (i nic więcej):
./1.txt
./2.txt
./3.txt
./fileWithNoExt
Co mam w moim katalogu wyjściowego ( A
, B
, i C
są wszystkie puste katalogi):
./1.txt
./2.txt
./3.txt
./fileWithNoExt
./A/
./B/
./C/
./D/
źródło
Odpowiedzi:
Jest tylko jeden sposób, który mogę wymyślić, i to ma pułapki
Twoje obecne polecenie, ale obejmują:
D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere *.* -r
Problemy z tym są jednak takie
W powyższej przykładowej strukturze powinna działać zgodnie z przeznaczeniem, ale nie znam twoich rzeczywistych wymagań. Nie sądzę, aby istniał sposób na wyłączenie folderów.
źródło
*.*
zwykłym,*
a dotyczy to tylko plików.Przetestowałem i potwierdziłem, że poniższa logika działa zgodnie z oczekiwaniami w przypadku usuwania pustych katalogów poniżej katalogu wypakowywania za pomocą aktualnie wykonywanych poleceń 7Zip.
Musisz tylko ustawić plik źródłowy i wyodrębnić lokalizację, a następnie skopiować i wkleić to w wierszu polecenia, aby zrobić dokładnie to, co wyjaśniłeś.
Dodatkowo, dzięki tej metodzie możesz pozostawić swoje polecenia 7Zip tak, jak teraz ich używasz.
W razie potrzeby ten działający poniżej przykład działania można rozszerzyć, aby przechodził przez wszystkie pliki zip w określonym folderze, zamiast kodować wyraźnie w taki czy inny sposób, jak to robiłeś itp. Z przyjemnością dodam przykład z tym również, więc daj mi znać.
Przykładowa logika wiersza polecenia
Dalsze zasoby i lektura
źródło
Jeśli po rozpakowaniu możesz uruchomić inne polecenie, możesz po prostu użyć robocopy do usunięcia pustych folderów
źródło: https://stackoverflow.com/questions/7831286/how-to-delete-empty-folders-using-windows-command-prompt
źródło
ROBOCOPY
będąc jednym z nich, ale idealnie szukam sposobu, aby program 7zip nie stworzył tego problemu w pierwszej kolejności.Jeśli podejście dwuprzebiegowe jest wykonalne, możesz wyświetlić zawartość za pomocą
7z l
i przeanalizować puste katalogi. Stamtąd możesz albo dołączyć to, co chcesz,-i
albo wykluczyć to, czego nie chcesz, w-x
zależności od tego, co będzie dla Ciebie bardziej wydajne.źródło