Entpacken Sie rekursiv die Dateien, in denen sie sich befinden, und löschen Sie die Archive

4

Ich habe eine Einstellung für die von mir verwendete Backup-Software überlistet. Normalerweise werden die Dateien von einer Netzwerkfreigabe auf ein Ersatzlaufwerk geladen, in Zip-Ordner komprimiert und dann an den Offsite-Hub gesendet.

Stattdessen wurde die Komprimierung zuerst durchgeführt. Jetzt habe ich eine Netzwerkfreigabe mit meinen ursprünglichen Verzeichnissen, aber alle Dateien wurden in einen eigenen Zip-Ordner komprimiert.

Gibt es eine schnelle Möglichkeit, alle ZIP-Ordner auf dem Server, auf dem sie sich befinden, zu dekomprimieren und dann die ZIP-Dateien zu löschen? Ich habe 7-zip, was so aussieht, als ob es den Job machen könnte.

Was ich bisher ausprobiert habe :

Ich habe eine Suche nach und ZIP-Dateien durchgeführt und dann "Hier extrahieren" aus dem 7zip-Menü ausgewählt, aber das extrahiert die ZIP-Dateien in den Ordner, auf den ich zufällig mit der rechten Maustaste geklickt habe, anstatt in den Ordner, in dem sie sich tatsächlich befinden. Ich habe die Dateiversionierung aktiviert, aber die letzte Sicherung, die ich habe, ist zu weit in der Vergangenheit.

Moses
quelle
War die Verwendung einer der Skriptmethoden erfolgreich?
gm2

Antworten:

4

Ein schnelles und schmutziges Powershell-Skript, mit dem Sie alles tun können, was Sie brauchen. Sie benötigen die 7zip-Kommandozeilenversion. Ändern Sie einfach die beiden Pfade im Skript und testen Sie es zuerst. Sie haben im Moment nicht die Möglichkeit, dies selbst zu tun.

$folderPath="X:\Test";

Get-ChildItem $folderPath -recurse | %{ 

    if($_.Name -match "^*.`.zip$")
    {
        $parent="$(Split-Path $_.FullName -Parent)";    
        write-host "Extracting $($_.FullName) to $parent"

        $arguments=@("e", "`"$($_.FullName)`"", "-o`"$($parent)`"");
        $ex = start-process -FilePath "`"C:\Path\To\7zip\7z.exe`"" -ArgumentList $arguments -wait -PassThru;

        if( $ex.ExitCode -eq 0)
        {
            write-host "Extraction successful, deleting $($_.FullName)"
            rmdir -Path $_.FullName -Force
        }
    }
}
Martin
quelle
Ich habe dieses Powershell-Skript getestet und es funktioniert für mich. Wie lautet der spezifische Text der Fehlermeldung?
gm2
Dies funktionierte letztendlich für mich, es tut mir leid wegen der Verspätung. Gibt es eine Möglichkeit, 7zip in diesem Skript anzuweisen, einen bestimmten .zip-Dateinamen in der Gruppe zu ignorieren?
Moses
1
Ja, ändern Sie einfach die erste if-Bedingung in: if (($ _. Name -match "^ *.` .Zip $ ") -und ($ _. Name -notmatch" nameToIgnore "))
Martin
Verwenden Sie "x" anstelle von "e" unter den Argumenten, um die Verzeichnisstruktur der ZIP-Datei beizubehalten.
Eminsenay
Sie können dem Startvorgang "-NoNewWindow" hinzufügen, um zu verhindern, dass bei jedem 7z-Befehl ein neues Konsolenfenster angezeigt wird.
Eric Cosky
1

Dies kann auf der Kommandozeile ausgeführt werden:

for /r %f in (*.zip) do 7z x "%f" -o"%~pf" && del "%f"

Details von für / r: https://ss64.com/nt/for_r.html

Das% ~ pf wird auf den Pfad erweitert (wie in der 'for'-Befehlshilfe angegeben: for /?).

Hermolaou
quelle
0

Diese Version behebt alle Probleme mit Leerzeichen und legt Dateien im Quellverzeichnis jedes Archivs ab:

set folderPath="N:\Private
for /f "usebackq delims=|" %%f in (`dir /s /b %folderPath%\*.zip"`) do "C:\Program Files\7-Zip\7z.exe" x "%%f" -aoa -o"%%~dpf" && del "%%f"
Rualark
quelle
-1

Folgendes kann über die Windows-Befehlszeile ausgeführt werden. Ändern Sie den Pfad zur ausführbaren Datei von 7-Zip nach Bedarf. Entfernen Sie das Kontrollkästchen, wenn Sie nicht zum Löschen der einzelnen ZIP-Dateien aufgefordert werden möchten.
set folderPath="X:\Test"
for /f %f in ('dir /s /b %folderPath%\*.zip') do "C:\Program Files\7-Zip\7z.exe" x %f -o%folderPath%\* && del /p %f

/p

gm2
quelle
Ich erhalte die Fehlermeldung "set folderPath =" C: / test "war zu diesem Zeitpunkt unerwartet."
Moses
Bitte versuchen Sie es noch einmal. Ich habe ein Problem im Befehl behoben, bei dem der Backslash unmittelbar nach jeder Instanz von% folderPath% nicht im Codeblock gerendert wurde. Ich habe vergessen, dass Backslash ein Escape-Zeichen in der Markdown-Syntax ist.
gm2
"x folderPathf war zu diesem Zeitpunkt unerwartet"
Moses
Führen Sie dies in einer Batch-Datei aus? In diesem Fall müssen Sie alle% f durch %% f ersetzen. Ändern Sie nicht% folderPath%
gm2
-1

Verwenden Sie Winraranstelle von 7ZIP, und wählen Sie dann alle Ihre ZIP-Dateien aus. Klicken Sie mit der rechten Maustaste, und wählen Sie ausExtract each archive to separate folder

Dadurch wird jede ZIP-Datei in den entsprechenden Ordner extrahiert und anschließend alle ZIP-Dateien gelöscht

shyammakwana.me
quelle
WinRARs Extract each archive to separate foldererzeugt die gleiche Ausgabe wie 7-Zips, Extract to "\*"wenn mehrere Zip-Dateien ausgewählt werden. Dekomprimiert nicht alle ZIP-Dateien direkt, wie es @moses wünscht.
gm2
Ich möchte nicht, dass jedes Archiv in einen eigenen Ordner extrahiert wird. Wie ich in der Frage sagte, möchte ich, dass sie in die Ordner extrahiert werden, in denen sie sich derzeit befinden.
Moses
@ gm2: das war bisher nicht meine erfahrung mit 7-zip. Was Sie beschrieben haben, ist genau das, was Sie von ihm erwarten , aber er legt immer alles in einem Ordner ab, der [0]~'nach mir benannt ist. Irritierend.
Nucking Futz