7z-Batch per SendTo

WulfmanGER

Commander
Registriert
Juli 2005
Beiträge
2.272
Hallo zusammen,

ich verzweifel :(

Ich habe folgendes vor:
Per Batch (SendTo) soll der INHALT eines markierten Ordners gepackt werden. Zieldateiname entspricht der Name des Ordners.cbz (nicht 7z oder zip!). Batchdatei deswegen, weil die Dateien vorher noch durch ein anderes Programm gejagt werden [das klappt ganz gut].

Beispiel:

d:\ordner1\ordner2\
ordner3\123.jpg
ordner3\124.jpg
ordner3\125.jpg

Ich markiere also ordner3 - und führe via SendTo die Batchdatei aus.
Das Ergebnis:
d:\ordner1\ordner2\ordner3.cbz mit folgenden Inhalt:
123.jpg
124.jpg
125.jpg
aber KEIN ordner3 den ich im Archiv erst anklicken müsste um an die 3 Dateien zu kommen.


Den passenden 7z-Aufruf hab ich bereits
(d:\er\pfad\zu\7-Zip\7z.exe a -tzip -mx=9 -mfb=257 )
Nach der 257 kommt natürlich noch der Zieldateiname ... tja und da hänge ich.

Ich hatte erst versucht das über eine Verknüpfung ohne Batch zu machen (muss ich halt 2x SendTo nutzen - vorbereiten + packen - wäre auch ok gewesen) - aber da hänge ich auch mit der Übergabe des Names. Mir gelang zumindest schonmal das alles markierte genauso so gepackt wurde - im Ordner wo die zu packenden Dateien sind ... Aber der Dateiname ...)

Ich hab hier also irgendein Verständnisproblem mit den Variablen für Dateiname, Pfard etc.

Hat hier jemand eine Idee?

Danke schon mal
 
Aus der Erinnerung: ich meine, mit einem Haufen Mühen rundum 7Z und Batch dazu überreden zu können den Order mit zu archivieren, ich finds nur nicht. Das Problem ist eine Form von Bug.

CN8
 
will ja nur den Inhalt des Ordners - nicht den Ordner selber. Das ganze per Batch - und da ist irgendwo der Hund begraben - ich bekomme den Pfad nicht ermittelt und via Batch an 7z übergeben.
 
So weit ich weiß kannst du auch genau den nicht an 7Zip verfüttern.
Der Kommandozeilen-Teil packt einen Ordnerinhalt in ein Archiv mit dem Namen des Ordners, aber nicht explizit einen Order unter mehreren als Archiv in dem (Sammel)Ordner in dem er sich befindet. Der Sammelordner müsste leer sein, bis auf den Ordner der gepackt werden soll. Dateien müssten sich Filtern lassen (Schlagwort Jokerzeichen) aber Ordner (unter mehreren) meine ich erfasst man damit nicht.
Probiere mal ob da nicht doch was zu drehen ist in der Packsyntax.

CN8
 
mit einer Batchdatei sollte aber doch folgendes möglich sein:

Ich selektiere einen Ordner -> Rechtsklick -> SendTo -> BATCH

Die BATCH geht jetzt in den Ordner (den ich irgendwie übergeben muss ... wie?) und führt dort den Commandozeilenpart von 7z aus.

Ich hab aber Problem mit dem Batch-Syntax und der übergabe via SendTo

Es gibt z.b. die Variable %~dp0 .. die zeigt den Pfad an wo man das Script gestartet hat ... tja ... nur doof das das Script im 7z-Verzeichnis liegt - das klappt also nicht.

Mit %~dp1 komme ich der Sache näher - das schmeißt das Root-Verzeichnis raus - das richtige. 7z auf h:, Rechtsklick auf g:\verzeichnis1 - ergebnis: g:\ ....

Mit %cd% komme ich noch näher dran:
d:\test\test1\test2\ => d:\test\test1\ ..... ich muß aber eine Variable finden die mir d:\test\test1\test2\ ausgibt - dann sollte ich 7z genau darauf loslassen ... als zielverzeichnis könnte ich %cd% (also eines hoch) angeben - Dateiname ... mhhh ja noch keine idee ... ich brauch nur nur test2 als Dateinamen (welcher ja auch der Quellpfad ist)

Sehr tricky irgendwie ;)

EDIT:
Teil 1 hab ich!

Code:
cd /d %~1
H:\Pfad\zu\7-Zip\7z.exe a -tzip -mx=9 -mfb=257 %1.cbz *.*

%~1 ist der markierte Ordner.
Mit cd /d wechsel ich in diesen Ordner - inkl. Wechsel des Laufwerkes (/d)
%1 - der Name des markierten Ordners
*.* -> alle Dateien in diesem Ordner - da es keine Unterordner geben darf - reicht das.

Was mit dieser Variante nicht klappt:
Ich markiere
Ordner1
Ordner2
Ordner3
gleichzeitig und starte das Script. Es wird nur der erste markierte Ordner genommen. Ziel wäre natürlich: ordner1.cbz, ordner2.cbz, ordner3.cbz... mal weiter grübeln...

Wenn dafür noch jemand eine Idee hat?
Jedenfalls kann ich jetzt schon mal 2 Schritte über die Batch zusammenfügen. Ist schon mal eine Zeitersparnis ...
 
Zuletzt bearbeitet:
Warum nutzt du nicht die Shell Erweiterung (= Kontextmenü)? Genau dafür ist sie ja gemacht worden.

Probier es sonst mit
Code:
%*

Code:
Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
       [<@listfiles...>]

Wobei deine Batch nicht wirklich das macht, was sie soll...
Code:
H:\Pfad\zu\7-Zip\7z.exe a -tzip -mx=9 -mfb=257 %1.cbz *.*
Du rufst 7z auf
  • willst Dateien als Zip hinzufügen
  • maximale Kompression
  • ... paar Parameter ...
  • Name des Archivs = Name des ersten Parameters + .cbz
  • als Inhalt alle Dateien im aktuellen Verzeichnis
Hast du also 500 Dateien in nem Ordner, wählst drei aus, nutzt die Batch im Send to, packt er dir alle 500 Dateien in die Datei mit dem Namen der ersten ausgewählten Datei. Das passiert weil er das Arbeitsverzeichnis entsprechend auf den Ordner setzt, von dem du das Script aufrufst und du Dateien und Ordner mit nem Punkt hinzufügst.

Mach es so:
Code:
H:\Pfad\zu\7-Zip\7z.exe -tzip -mx=9 -mfb=257 "%~1.cbz" %*
Damit kannst du aber immer noch nicht den genauen Dateinamen bestimmen, denn dieser ist immer der des ersten Parameters. Dafür hast du aber immerhin nur die Dateien drin, die du auch wirklich auswählst.
 
Zurück
Oben