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

Mehrere Ordner per batch zippen

Frage Entwicklung Batch & Shell

Mitglied: Deadwalker

Deadwalker (Level 1) - Jetzt verbinden

25.07.2007, aktualisiert 18:22 Uhr, 14555 Aufrufe, 12 Kommentare

Hallo Leute,

ich versuche gerade ein kleines Batch Skript schreiben das in einem Verzeichnis alle enthaltenen Ordner jeweils in ein eigenes Zip File (das so heißen soll wie der Ordner) packt.

Also das bedeutet, wenn sich drei Ordner in dem betrachteten Verzeichnis befinden, sollen am Ende 3 zip Files vorhanden sein mit den jeweiligen Ordnernamen.

Ich nutze Win2K kann also nicht auf XP Zip Funktionalität zurückgreifen. Ich arbeite hingegen mit WinZip und den damit angebotenen Kommandozeilenoptionen

Mein Ansatz

01.
@echo off 
02.
cls 
03.
echo Please stand by: Zipping files....... 
04.
echo. 
05.
 
06.
for /F %%i in ('WIE kann ich hier über die Verzeichnisse springen') do @start C:\Program Files\WinZip\WZZIP.exe -rp %%i.zip *.*  
07.
(dies startet den zip per Winzip, der Befehl alleine arbeitet einwandfrei, allerdings bekomm ich ihn nicht richtig in die FOR Schleife eingebunden, keine Ahnung wie man den einbetten muss, mit " oder ' ??) 
08.
 
09.
@echo on 
Hat jemand von euch eine, Idee, eigentlich fehlen mir ja nur 2 Sachen, der Weg die Verzeichnisse einzeln anzusteuern und das richtige ansprechen des WZZIP Befehls in der FOR Schleife.

Gruß
deadwalker
Mitglied: AndreasA
25.07.2007 um 12:43 Uhr
Moin deadwalker
Also das bedeutet, wenn sich drei Ordner in dem betrachteten Verzeichnis befinden, sollen
am Ende 3 zip Files vorhanden sein mit den jeweiligen Ordnernamen.
Also Annahme
Obergeordnetes Verzeichnis=C:\OberDIR
Unterverzeichnis 1=C:\OberDIR\SubDir1
Unterverzeichnis 2=C:\OberDIR\SubDir2
Unterverzeichnis 3=C:\OberDIR\SubDir3
usw....
Zipablageverzeichnis=C:\Zipdir

dann müsste das hier (mal ungetestet) funktionieren
@echo off
cls
echo Please stand by: Zipping files.......
echo.
Set Oberdir=C:\OberDir
Set Zieldir=C:\Zipdir
for /F %%i in ('dir %Oberdir% /b /a:d') do @start C:\Program Files\WinZip\WZZIP.exe -rp %Zipdir%\%%i.zip %Oberdir%\%%i\*.*
@echo on

Gruß Andreas
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 15:11 Uhr
Hallo Andreas,

dein Vorschlag funktioniert nach einigen kleinen Anpassungen wirklich Super! Danke dafür

Nur gibt es noch ein kleines Problem, ich versuche nun von der statischen Schiene wegzukommen, es sollte allso immer das aktuelle Verzeichnis als Oberdir gesetzt werden. Das realisiere ich recht gewöhnlich mit %CD% als Umgebungsvariable. Allerdings funktioniert genau das nicht aus dem Batch Skript heraus, (geht nur in der Shell) hier bekomme ich immer C:\WINNT, also den Standardpfad zurück.
Das Skript wird von einem Netzwerkpfad (UNC) gestartet, ich schätze das hier das Problem begründet ist, oder? Glaube mich daran zu erinnern das das Probleme macht.


Außerdem hab ich aber immer noch ein Problem mit den Leerzeichen im Pfad, das Zip Kommando wird nicht erkannt, wie kapsel ich das Ganze denn noch mal sinnvoll. (Sorry das mach ich immer falsch)


Schonmal im Vorraus danke

Gruß
deadwalker
Bitte warten ..
Mitglied: bastla
25.07.2007 um 15:21 Uhr
Hallo Deadwalker!

In diesem Fall würde sich doch das Ganze reduzieren auf:
01.
for /F "delims=" %%i in ('dir /b /ad') do "C:\Program Files\WinZip\WZZIP.exe" -rp "%%i.zip" "%%i\*.*"
Grüße
bastla
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 15:48 Uhr
Hi bastla,

genau so funktioniert das Ganze, danke!!

Wie gesagt hab ich aber immer noch das Problem das der aktuelle Pfad falsch ausgelesen wird. Ich bekomme immer C:\WINNT zurück, tatsächlich wird das Skript aber aus einem UNC Pfad aufgerufen (also z.B. \\server\skript\zipme.cmd).

Ich glaube genau da liegt das Problem, hab aber im Moment keine Ahnung wie ich das umgehe.
Starte ich das Skript, wird ganz C:\WINNT gezippt

Danke
Bitte warten ..
Mitglied: bastla
25.07.2007 um 16:15 Uhr
Hallo Deadwalker!

Vielleicht hilft das: http://support.microsoft.com/kb/156276/de

Noch eine Frage: Wie rufst Du den Batch eigentlich auf?

Grüße
bastla
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 16:21 Uhr
Hey bastla,

super, ich google ewig und du findest sowas direkt, was mach ich falsch???

Die Lösung hört sich gut an, allerdings soll das Skript in der Firma eingesetzt werden und hier darf ich nichts wesentliches an der Registry ändern und außerdem müsste ich das Ganze dann bei allen Nutzern ändern. Daher fällt die Lösung auch weg.

Möglich wäre das anlegen eines netzlaufwerks mit net use und nach getaner Arbeit anschließendes Trennen. Allerdings müsste ich so immer wissen welche Laufwerksbuchstaben noch frei sind. Ist daher auch eher nicht geeignet.

Ach mist, mir fällt nichts anderes ein.

Trotzdem danke!
Bitte warten ..
Mitglied: bastla
25.07.2007 um 16:29 Uhr
Hallo Deadwalker!

Eine Idee hätte ich noch (ist zwar nicht ganz so komfortabel, könnte aber klappen): Gib dem Batch beim Aufruf als Parameter "." mit und füge am Anfang noch folgende Zeile ein:
01.
cd /d "%~dp1"
was mach ich falsch???
Das kann ich nicht sagen, aber falls Dich der von mir verwendete Suchbegriff (für Google ) interessiert:
01.
w2000 cmd "UNC-Pfade werden nicht unterstützt."
Grüße
bastla
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 17:10 Uhr
So jetzt mach ich mich mal endgültig zum affen, aber verdammt wie übergeb ich nochma nen Parameter wenn ich das Skript mit Doppelklick starte?
%1 irgendwie so?

Und was bewirkt denn der Befehl? cd /d "%~dp1"

Viele Grüße
Bitte warten ..
Mitglied: bastla
25.07.2007 um 17:31 Uhr
Hallo Deadwalker!

Drum hatte ich oben noch (nachträglich) nach der Startart gefragt ...

Wenn Du den Batch per Doppelklick startest, kannst Du natürlich den "." nicht mitgeben, aber Du könntest einfach einen der zu packenden Ordner auf den Batch ziehen.

Und was bewirkt denn der Befehl? cd /d "%~dp1"
Mit dem Schalter "/d" kann der "cd"-Befehl auch gleich das Laufwerk wechseln, und "%~dp1" steht für Laufwerk (drive) und Pfad des ersten Parameters (was gleichbedeutend mit dem "beinhaltenden" Ordner ist).

Dann würde sich übrigens zur Sicherheit im Batch vorweg zumindest noch ein
01.
if not exist %1 goto :eof
empfehlen, damit der Batch wirklich nur ausgeführt wird, wenn ein Ordner übergeben (und nicht mit bloßem Doppelklick gestartet) wurde.

Grüße
bastla
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 17:50 Uhr
Hi bastla,

ja also hab das Ganze getestet und es nimmt jetzt zwar nicht mehr C:\WINNT an sondern H:\ (ein Netzlaufwerk) aber helfen tut das nicht. Ich kapiers einfach net, ich glaub ich mach das gleich mit VBS.

Trotzdem danke für all deine Hilfe, hast dir nen Bier verdient!
Bitte warten ..
Mitglied: AndreasA
25.07.2007 um 17:55 Uhr
So jetzt mach ich mich mal endgültig zum
affen, aber verdammt wie übergeb ich
nochma nen Parameter wenn ich das Skript mit
Doppelklick starte?
%1 irgendwie so?

Und was bewirkt denn der Befehl? cd /d
"%~dp1"

Viele Grüße


Ohman deadwalker,

du solltest doch bastla's frage beantworten wie du den Batch aufrufen willst!!! Und vorallem wo du die Zip-dateien hinschieben willst?

hier noch mal mein Ansatz von oben etwas modifizierter
-------schnipp zipme.cmd---------------------------
@echo off
cls
echo Please stand by: Zipping files.......
echo.
:main
..... springe von ein Verzeichnis zum nächsten mittels CD
...und rufe jeweils mittels call :zipsubdir . die Ziproutine auf
... eventuelle weiterverarbeitung
goto :EOF

:zipsubdir
Set Oberdir=%1
Set Zieldir=C:\ZIPTEMP
SET zip_prog=C:\Programme\WinZip\WZZIP.exe
for /F %%i in ('dir %Oberdir% /b /a:d') do (@start %zip_prog% -rp %Zieldir%\%%i.zip %Oberdir%\%%i\*.*)
goto :EOF
------ende schnipp---------------------------------
Zu deiner Frage hätte ein einfaches cd /? an der Console geholfen und mit "%dp1" springt dein Script dann in das Übergebene Verzeichnis von %1 (in diesem Falle halt das aktuelle durch "." gekennzeichnete)

Im Falle meiner Lösung müsstest du entweder dieses Script mit einer Main-Prozedur erweitern, die durch deine gewünschten Verzeichnisse springt oder du hast ein obergeordnetes Script, welches dieses Batch dann aufruft mittels \\server\script\zippme.cmd "." (aber die Anführungszeichen weglassen !!!)

Um flexibel zu bleiben, kannst du alternativ auch noch ein Zieldir als %2 übergeben und in diesem Schnippsel.cmd die Zeile Set Zieldir=C:\ZIPTEMP durch SET Zieldir=%2 ersetzen.

So long Andreas

PS bei mir funktioniert das auch mit Leerzeichen und UNC-Pfaden
Bitte warten ..
Mitglied: Deadwalker
25.07.2007 um 18:22 Uhr
Danke Super Tipps von euch beiden. Hab mich letzten Endes für die Lösung von bastla entschieden.
Virtuelles Bier ausgeb!

@andreas: Deine Lösung erscheint mir auch sinnvoll, muss für meine Zwecke allerdings nicht so "komplex" sein.
Ach noch was: cd /? liefert zumindest bei mir keine Infos darüber was "%~dp1" macht.
Und dazu wie ich mein Skript Aufrufe hab ich bastla nicht geantwortet weil er das nachträglich editiert hat und ich das beim verfassen meiner Antwort nicht gesehen hab.

Naja jetzt läufts und dafür bin ich dankbar.

Thx
deadwalker
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Google Android
gelöst GMail: Mehrere Ordner synchronisieren (2)

Frage von honeybee zum Thema Google Android ...

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

Frage von tocksick zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...