Czy 7zip może usunąć puste katalogi po rozpakowaniu archiwum?

1

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 epolecenia. 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 Csą wszystkie puste katalogi):

./1.txt
./2.txt
./3.txt
./fileWithNoExt
./A/
./B/
./C/
./D/
PerryC
źródło
@LMFAO_A_JOKE Logika ma sens - to, czego tak naprawdę tutaj szukam, to sposób na zrobienie tego za pomocą 7zip. Zatrzymałbym odpowiedź, ponieważ wciąż dodaje wartości. Twoje zdrowie.
PerryC,

Odpowiedzi:

1

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

  1. Pliki bez rozszerzenia nie zostaną rozpakowane
  2. Katalogi z. w środku nadal by się wydobyli

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.

Jonno
źródło
Mam wrażenie, że to tak blisko, jak tylko się da. To niefortunne, że nie można zastąpić *.*zwykłym, *a dotyczy to tylko plików.
PerryC
@PerryC Rzeczywiście - nie sądzę, aby można było wprowadzić rozróżnienie bez uzyskania atrybutu katalogu. Zgadzam się, że to dość frustrujące. W ustawieniach Linux / Mac to rozwiązanie spowodowałoby więcej problemów niż rozwiązuje, ale jeśli byłoby przechowywane w środowisku Windows, byłoby dość niezawodne. Mimo to czułbym się bezpieczniej, wykonując po raz drugi zamiatanie za pomocą innego narzędzia lub skryptu, aby „uporządkować”.
Jonno
1

Czy 7zip może usunąć puste katalogi po rozpakowaniu archiwum?

Idealnie chciałbym, aby po rozpakowaniu archiwum nie było potrzeby usuwania katalogów z twardego kodu.

Zostały mi puste foldery w moim katalogu wyjściowym. Czy istnieje sposób, aby 7zip albo usunął te puste katalogi, albo ich nie utworzył?

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ś.

  • Nie jestem pewien, co dotyczy was wszystkich na sztywno kodowanie katalogu wypakowywania i nazw plików zip do wypakowania, ale twój przykład pokazuje, że właśnie to robisz. Tak więc poniższa metoda nie będzie wymagała więcej wysiłku niż to, co pokazuje twój przykład.

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

@ECHO ON
SET SourceFile=D:\MyArchive.zip
SET ExtractDir=D:\ExtractToHere

D:\7z.exe e %SourceFile% -o%ExtractDir%

FOR /F "TOKENS=*" %A IN ('"DIR /S /B /AD "%ExtractDir%""') DO RD "%~A"

Dalsze zasoby i lektura

Pimp Juice IT
źródło
0

Jeśli po rozpakowaniu możesz uruchomić inne polecenie, możesz po prostu użyć robocopy do usunięcia pustych folderów

 ROBOCOPY folderName folderName /S /MOVE

źródło: https://stackoverflow.com/questions/7831286/how-to-delete-empty-folders-using-windows-command-prompt

Lee Harrison
źródło
Jestem pewien, że istnieje wiele dobrych sposobów usuwania pustych folderów, ROBOCOPYbędąc jednym z nich, ale idealnie szukam sposobu, aby program 7zip nie stworzył tego problemu w pierwszej kolejności.
PerryC
0

Jeśli podejście dwuprzebiegowe jest wykonalne, możesz wyświetlić zawartość za pomocą 7z li przeanalizować puste katalogi. Stamtąd możesz albo dołączyć to, co chcesz, -ialbo wykluczyć to, czego nie chcesz, w -xzależności od tego, co będzie dla Ciebie bardziej wydajne.

BowlesCR
źródło
To dodałoby warstwę komplikacji, której nie chcę. Ten przykład IRL jest używany w pliku .proj uruchomionym przez MSBuild. Obecnie trwa wyodrębnianie, operacja przenoszenia, a następnie usuwanie. Po prostu próbuję sprawdzić, czy mogę zmniejszyć złożoność.
PerryC