Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordner zippen mit Batch

Frage Entwicklung

Mitglied: rubono

rubono (Level 1) - Jetzt verbinden

08.08.2012 um 16:19 Uhr, 9756 Aufrufe, 18 Kommentare

Hallo Leute,

hab da mal eine Frage

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
Mitglied: tobi83
08.08.2012 um 20:51 Uhr
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
Bitte warten ..
Mitglied: bastla
08.08.2012, aktualisiert 09.08.2012
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):
01.
@echo off & setlocal 
02.
set "Startordner=D:\Oberordner" 
03.
set "7z=%ProgramFiles%\7-zip\7z.exe" 
04.
 
05.
for /d /r "%Startordner%" %%i in (*) do ( 
06.
    pushd "%%i" 
07.
    echo Bearbeite "%%i" 
08.
    if not exist "%%~ni.zip" ( 
09.
        echo "%7z%" a "%%~ni.zip" *.zip -mx0 && ( 
10.
            for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a" 
11.
12.
13.
    popd 
14.
15.
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]
Bitte warten ..
Mitglied: rubono
09.08.2012 um 09:56 Uhr
Hallo,

danke schon mal für die Hilfe
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
Bitte warten ..
Mitglied: bastla
09.08.2012 um 10:06 Uhr
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 - Du findest sie hier beschrieben ...
Bitte warten ..
Mitglied: rubono
09.08.2012 um 10:28 Uhr
Hey bastla,

habe es jetzt so:

01.
@echo off & setlocal 
02.
set "Startordner=Y:\1__CURRENT" 
03.
set "%Program Files%\7-zip\7z.exe" 
04.
 
05.
 
06.
for /d /r "%Startordner%" %%i in (*) do ( 
07.
pushd "%%i" 
08.
echo Bearbeite "%%i" 
09.
if not exist "%%~ni.zip" ( 
10.
echo "%7z%" a "%%~ni.zip" *.zip -mx0 && ( 
11.
for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a" 
12.
13.
14.
popd 
15.
16.
echo Fertig.
bekomme aber immer noch diese Fehlermeldung
woran liegt das?

Grüße
rubono
Bitte warten ..
Mitglied: bastla
09.08.2012 um 10:53 Uhr
Hallo rubono!
woran liegt das?
Vor allem daran, dass es keine gute Idee war, eine Variable %7z% zu nennen (und das Weglassen des Variablennamens, wie in Deiner Zeile 3, macht's auch nicht besser ) - versuch es nochmal mit dieser Version:
01.
@echo off & setlocal 
02.
set "Startordner=D:\Oberordner" 
03.
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe" 
04.
 
05.
for /d /r "%Startordner%" %%i in (*) do ( 
06.
    pushd "%%i" 
07.
    echo Bearbeite "%%i" 
08.
    if not exist "%%~ni.zip" ( 
09.
        echo "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && ( 
10.
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" echo del "%%a" 
11.
12.
13.
    popd 
14.
15.
echo Fertig.
Grüße
bastla
Bitte warten ..
Mitglied: rubono
09.08.2012 um 11:09 Uhr
Hallo bastla,

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

Grüße

rubono
Bitte warten ..
Mitglied: rubono
09.08.2012 um 14:08 Uhr
Hallo noch mal,

noch eine kurze frage

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

01.
 @echo off & setlocal 
02.
set "Startordner=D:\Ordner\*bestimmteOrdnernamen" 
03.
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe" 
04.
 
05.
for /d /r "%Startordner%" %%i in (*) do ( 
06.
    pushd "%%i" 
07.
    echo Bearbeite "%%i" 
08.
    if not exist "%%~ni.zip" ( 
09.
         "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && ( 
10.
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" del "%%a" 
11.
12.
13.
    popd 
14.
15.
echo Fertig.
Grüße

rubono
Bitte warten ..
Mitglied: bastla
09.08.2012, aktualisiert um 15:35 Uhr
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:
01.
 @echo off & setlocal 
02.
set "Startordner=D:\Ordner" 
03.
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe" 
04.
 
05.
for /d /r "%Startordner%" %%i in ("*bestimmteOrdnernamen") do ( 
06.
    pushd "%%i" 
07.
    echo Bearbeite "%%i" 
08.
    if not exist "%%~ni.zip" ( 
09.
         "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && ( 
10.
            for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" del "%%a" 
11.
12.
13.
    popd 
14.
15.
echo Fertig.
Grüße
bastla
Bitte warten ..
Mitglied: rubono
09.08.2012 um 14:55 Uhr
Hallo bastla,

danke hat funktioniert

Grüße
rubono
Bitte warten ..
Mitglied: rubono
10.08.2012 um 08:58 Uhr
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
Bitte warten ..
Mitglied: bastla
10.08.2012 um 11:15 Uhr
Hallo rubono!

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

Grüße
bastla
Bitte warten ..
Mitglied: rubono
10.08.2012 um 11:40 Uhr
Hey bastla,

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

Grüße

rubono
Bitte warten ..
Mitglied: rubono
10.08.2012 um 14:35 Uhr
Hallo Bastla,

Jetzt löscht es die Dateien jedoch nicht mehr
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

Grüße

rubono
Bitte warten ..
Mitglied: bastla
10.08.2012 um 15:23 Uhr
Hallo rubono!
Jetzt löscht es die Dateien jedoch nicht mehr
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
Bitte warten ..
Mitglied: rubono
10.08.2012 um 15:52 Uhr
Hallo bastla,

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

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

Grüße

rubono
Bitte warten ..
Mitglied: bastla
10.08.2012 um 16:05 Uhr
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:
01.
@echo off & setlocal 
02.
set "Startordner=D:\Ordner\bestimmteOrdnernamen" 
03.
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe" 
04.
 
05.
pushd "%Startordner%" 
06.
for /d %%i in (*) do ( 
07.
    echo Bearbeite "%%i" 
08.
    if not exist "%%~ni.zip" "%ZIPProg%" a "%%~ni.zip" "%%i\*.*" && rd "%%i" 
09.
10.
popd 
11.
echo Fertig.
Das funktioniert so nur für eine Unterordnerebene ...

Grüße
bastla
Bitte warten ..
Mitglied: rubono
13.08.2012 um 09:46 Uhr
Hallo bastla,

ja genau das hab ich gemeint.
Vielen Dank.

Grüße
rubono
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...