rubono
Goto Top

Ordner zippen mit Batch

Hallo Leute,

hab da mal eine Frage face-smile

folgendermaßen stellt sich die Sache dar:

ich habe einen Ordner welcher mehrere Unterordner hat und in diesen Unterordnern sind mehrere .zip-Files.
Nun sollen diese .zip Files alle zu einer .zip File gezippt werden und diese .zip File dann in dem jeweiligen Unterordner abgespeichert werden. Und das alles mit Batch.
Ich hoffe trotz dieser komischen Erklärung könnt ihr mir weiterhelfen. ;)

Grüße

rubono

Content-ID: 189290

Url: https://administrator.de/contentid/189290

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

tobi83
tobi83 08.08.2012 um 20:51:09 Uhr
Goto Top
Hi,

nimm 7zip damit geht sowas auch unter Windows. Hier findest du sogar ein paar Beispiele:
http://www.dotnetperls.com/7-zip-examples

Gruß
-tobi
bastla
bastla 08.08.2012, aktualisiert am 09.08.2012 um 10:07:52 Uhr
Goto Top
Hallo rubono!

Wenn ich das richtig interpretiere, sollen also je Ordner die enthaltenen zip-Dateien zu einer einzigen zusammengefasst (und danach gelöscht?) werden.

Generell ginge das etwa so (ungetestet):
@echo off & setlocal
set "Startordner=D:\Oberordner"  
set "7z=%ProgramFiles%\7-zip\7z.exe"  

for /d /r "%Startordner%" %%i in (*) do (  
    pushd "%%i"  
    echo Bearbeite "%%i"  
    if not exist "%%~ni.zip" (  
        echo "%7z%" a "%%~ni.zip" *.zip -mx0 && (  
            for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"  
        )
    )
    popd
)
echo Fertig.
Es sollten jetzt alle Unterordner des angegebenen Startordners durchlaufen und alle darin befindlichen zip-Dateien zu einer einzigen Datei mit dem Namen des Ordners zusammengefasst und, bei Erfolg, danach gelöscht werden.

Wegen der beiden "echo" in den Zeilen 9 und 10 werden diese Aktionen allerdings zunächst nur angezeigt - wenn die entsprechenden Befehle ok aussehen, kannst Du diese "echo" entfernen und den Batch damit "scharf" stellen.

Ich habe hier auch mal unterstellt, dass zum Zippen "7zip" verwendet werden soll - den Pfad in Zeile 3 müsstest Du an Deine Gegebenheiten anpasssen ...

Grüße
bastla

[Edit] %7z% (für ev Installationspfad mit enthaltenen Leerzeichen) unter Anführungszeichen gesetzt [/Edit]
rubono
rubono 09.08.2012 um 09:56:39 Uhr
Goto Top
Hallo,

danke schon mal für die Hilfe face-smile
habe es jetzt so angepasst(wie mache ich die Zeilenansicht?):

@echo off & setlocal
set "Startordner=Y:\1__CURRENT"
set "7z=%C:\ProgramFiles%\7-zip\7z.exe"


for /d /r "%Startordner%" %%i in (*) do (
pushd "%%i"
echo Bearbeite "%%i"
if not exist "%%~ni.zip" (
echo %7z% a "%%~ni.zip" *.zip -mx0 && (
for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"
)
)
popd
)
echo Fertig.

scheint aber falsch angepasst zu sein da ich diesen Fehler bekomme: the following usage of the path operator in batch paramert substitution is invalid: %~ni.zip" *.zip -mx0 && <

habe ich den Pfad für 7zip falsch angepasst?

Grüße rubono
bastla
bastla 09.08.2012 um 10:06:35 Uhr
Goto Top
Hallo rubono!
habe ich den Pfad für 7zip falsch angepasst?
Yep - entweder verwendest Du die auch eigentlich dafür gedachte Systemvariable "%ProgramFiles%" (einfach einmal in einer CMD-Shell
set
eingeben, dann siehst Du nicht nur deren Inhalt, sondern auch, was es da noch so gibt), oder Du gibst den Pfad "hardcoded" an - dann aber ohne die Prozentzeichen ...

... und wenn Du schon am Bearbeiten des Batches bist, könntest Du zur Sicherheit auch noch in Zeile 9 %7z% unter Anführungszeichen setzen (ich hole das oben auch noch nach).

Grüße
bastla

P.S.: Schön, dass Du nach der "Code"-Formatierung fragst face-smile - Du findest sie hier beschrieben ...
rubono
rubono 09.08.2012 um 10:28:17 Uhr
Goto Top
Hey bastla,

habe es jetzt so:

@echo off & setlocal
set "Startordner=Y:\1__CURRENT"  
set "%Program Files%\7-zip\7z.exe"  


for /d /r "%Startordner%" %%i in (*) do (  
pushd "%%i"  
echo Bearbeite "%%i"  
if not exist "%%~ni.zip" (  
echo "%7z%" a "%%~ni.zip" *.zip -mx0 && (  
for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"  
)
)
popd
)
echo Fertig.

bekomme aber immer noch diese Fehlermeldung face-sad
woran liegt das?

Grüße
rubono
bastla
bastla 09.08.2012 um 10:53:56 Uhr
Goto Top
Hallo rubono!
woran liegt das?
Vor allem daran, dass es keine gute Idee war, eine Variable %7z% zu nennen face-sad (und das Weglassen des Variablennamens, wie in Deiner Zeile 3, macht's auch nicht besser face-wink) - versuch es nochmal mit dieser Version:
@echo off & setlocal
set "Startordner=D:\Oberordner"  
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"  

for /d /r "%Startordner%" %%i in (*) do (  
    pushd "%%i"  
    echo Bearbeite "%%i"  
    if not exist "%%~ni.zip" (  
        echo "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && (  
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"  
        )
    )
    popd
)
echo Fertig.
Grüße
bastla
rubono
rubono 09.08.2012 um 11:09:12 Uhr
Goto Top
Hallo bastla,

jetzt funktioniert alles genau so wie es soll. face-smile
Vielen Dank !

Grüße

rubono
rubono
rubono 09.08.2012 um 14:08:32 Uhr
Goto Top
Hallo noch mal,

noch eine kurze frage face-smile

wieso funktioniert es nicht mehr wenn ich den pfad so spezialisiere ?

 @echo off & setlocal
set "Startordner=D:\Ordner\*bestimmteOrdnernamen"  
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"  

for /d /r "%Startordner%" %%i in (*) do (  
    pushd "%%i"  
    echo Bearbeite "%%i"  
    if not exist "%%~ni.zip" (  
         "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && (  
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" del "%%a"  
        )
    )
    popd
)
echo Fertig.

Grüße

rubono
bastla
bastla 09.08.2012 aktualisiert um 15:35:51 Uhr
Goto Top
Hallo rubono!
wieso funktioniert es nicht mehr wenn ich den pfad so spezialisiere ?
Weil es dann keine gültige Pfadangabe ist - Du kannst es aber so versuchen:
 @echo off & setlocal
set "Startordner=D:\Ordner"  
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"  

for /d /r "%Startordner%" %%i in ("*bestimmteOrdnernamen") do (  
    pushd "%%i"  
    echo Bearbeite "%%i"  
    if not exist "%%~ni.zip" (  
         "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && (  
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" del "%%a"  
        )
    )
    popd
)
echo Fertig.
Grüße
bastla
rubono
rubono 09.08.2012 um 14:55:40 Uhr
Goto Top
Hallo bastla,

danke hat funktioniert face-smile

Grüße
rubono
rubono
rubono 10.08.2012 um 08:58:45 Uhr
Goto Top
Hallo nochmal !,

ich muss leider noch einmal nerven :/.
Wie müsste ich die batch umschreiben um einfach alle Dateien zu zippen ? Egal ob sie .zip sind oder nicht.


Grüße

rubono
bastla
bastla 10.08.2012 um 11:15:07 Uhr
Goto Top
Hallo rubono!

Du könntest ganz verwegen aus den beiden "*.zip" einfach "*.*" machen ... face-wink

Grüße
bastla
rubono
rubono 10.08.2012 um 11:40:16 Uhr
Goto Top
Hey bastla,

ohje ich Idiot hab den stern vor dem punkt vergessen :D

Grüße

rubono
rubono
rubono 10.08.2012 um 14:35:47 Uhr
Goto Top
Hallo Bastla,

Jetzt löscht es die Dateien jedoch nicht mehr face-sad
Ich muss jetzt ausserdem in dem Ordner "bestimmterOrdnername" in alle Unterordner rein dann dort die Dateien in den jeweiligen Unterordnern zippen und den Ordner löschen.
ich war so froh fertig zu sein und bin jetzt wieder mal ratlos.
Vielleicht kannst du mir ja noch einmal helfen face-smile

Grüße

rubono
bastla
bastla 10.08.2012 um 15:23:30 Uhr
Goto Top
Hallo rubono!
Jetzt löscht es die Dateien jedoch nicht mehr face-sad
Du hast beide *.zip durch *.* ersetzt?
Ich muss jetzt ausserdem in dem Ordner "bestimmterOrdnername" in alle Unterordner rein dann dort die Dateien in den jeweiligen Unterordnern zippen und den Ordner löschen.
Sorry, verstehe ich nicht - welcher Ordner soll gelöscht werden?

Grüße
bastla
rubono
rubono 10.08.2012 um 15:52:36 Uhr
Goto Top
Hallo bastla,

Ja habe ich und habe meine Fehler schon gefunden da es Ordner waren musste ich rd verwenden anstatt del face-smile

Es soll der Unterordner aus welchem man die Dateien zippt gelöscht werden.

Grüße

rubono
bastla
bastla 10.08.2012 um 16:05:55 Uhr
Goto Top
Hallo rubono!
Es soll der Unterordner aus welchem man die Dateien zippt gelöscht werden.
Dann muss aber die zip-Datei im Startordner gespeichert werden, um nicht mit dem Unterordner gelöscht zu werden - ungetestet etwa:
@echo off & setlocal
set "Startordner=D:\Ordner\bestimmteOrdnernamen"  
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"  

pushd "%Startordner%"  
for /d %%i in (*) do (
    echo Bearbeite "%%i"  
    if not exist "%%~ni.zip" "%ZIPProg%" a "%%~ni.zip" "%%i\*.*" && rd "%%i"  
)
popd
echo Fertig.
Das funktioniert so nur für eine Unterordnerebene ...

Grüße
bastla
rubono
rubono 13.08.2012 um 09:46:49 Uhr
Goto Top
Hallo bastla,

ja genau das hab ich gemeint.
Vielen Dank.

Grüße
rubono