two-ak-two
Goto Top

7-zip -Pfad nicht korrekt angegeben in der Batch

Guten Tag,

mein Nick ist two-ak-two.

System
Win7 Home Premium 64 bit
7-zip 9.25 64 bit

diese Batch habe ich durch lesen anderer Beiträge von hier und durch Tipps von mehreren Benutzer für mich übernommen. Danke dafür.
set "AKTPFAD=%cd%"  
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a %cd%.7z   

Ich benutze diese Batch durch das Kontext Menü, der Verweiß ist zum SendTo Ordner und dort ist die gespeichert (kann mann auch wo anders speichern, denke ich). Mann könnte das auch nach CMD /C als Befehl ausführen, nur ich erkenne aus der Batch gar keinen Syntax und deswegen ist es für mich unmöglich. Wäre aber schön wenn mann den Befehl auch im command Schlüssel eingeben könnte.

Mein Problem ist: Das Archiv wird nicht im Ordner erstellt wo ich mich befinde sondern auf dem Desktop.

Das .tmp Archiv schon, dann wird es zum Desktop kopiert wo auch der Pfad ist der festgelegt wurde damit ich den Namen des Ordners für das Archiv übernehmen kann.

Frühere Batch test Versuche waren erfolgreich aber der Name des Ordners wurde nicht übernommen.
Im 7-zip Syntax finde ich, keine angaben dafür und so kam ich zu der nachfolgenden Doku.

Die Zusammenfassung von >Thomas Glöckler< Interne Befehle der CMD-Shell wurde auch gelesen, danke. Die Logik kann ich nicht zu meinem Vorteil einsetzen, ich vestehe das nur zum teil, als ganzes will es nicht in meine Zentrale. Bin nicht der jüngste, deswegen bestimmt face-smile

Content-Key: 196256

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: bastla
bastla Dec 26, 2012 updated at 17:06:29 (UTC)
Goto Top
Hallo two-ak-two und willkommen im Forum!

Was soll denn eigentlich der Batch bewirken, was ist beim Aufruf im Explorer markiert?

Soferne es, wie es aussieht, um eine Liste von Ordnern ginge, solltest du jeden davon mit
for %%x in (*) do if exist "%%~x\" echo Verarbeite %%x (Ordnername: "%%~nxx")  
in die Variable "%%x" bekommen und könntest dann in weiterer Folge die passende "7-zip"-Anweisung dafür basteln ...

Grüße
bastla

[Edit] Prüfung auf Ordner vereinfacht [/Edit]
Member: two-ak-two
two-ak-two Dec 26, 2012 updated at 17:20:28 (UTC)
Goto Top
Zitat von @bastla:
Hallo two-ak-two und willkommen im Forum!
Danke
Was soll denn eigentlich der Batch bewirken, was ist beim Aufruf im Explorer markiert?
der Batch führt folgendes aus:
im Ordner "Ordner1" sind verschiedene Dateien vorhanden. Dazu zählen Ordner, Text, Archiv usw Dateien.
Ich markiere eine davon und erstelle mit der Batch das Archiv mit dem Namen "Ordner1"
Das Archiv wird im falschen Pfad erstellt aber mit dem richtigen Namen, alle Dateien sind im Archiv gepackt wie gewünscht.
Soferne es, wie es aussieht, um eine Liste von Ordnern ginge, solltest du jeden davon mit
Es ist keine Liste von Ordnern.
for %%x in (*) do if exist "%%~x\") echo Verarbeite %%x (Ordnername: "%%~nxx")  
in die Variable "%%x" bekommen und könntest dann in weiterer Folge die passende "7-zip"-Anweisung
Das ist bestimmt gut, ich verstehe es allerdings nicht face-sad
dafür basteln ...
bin schon 6 Monate am basteln face-smile

Edit:
jetzt habe ich folgendes probiert hinzu gefügt
xcopy %cd%.7z Paket
Es passiert folgendes:
Archiv "Ordner1.7z" wird vom Desktop in den Ordner "C:\%USER%\***\Desktop\Ordner1\Paket" kopiert (nicht das wahre und Konsole wartet auf Eingabe D - Datei oder V -Verzeichnis)

Grüße
bastla
Gruß zurück
Member: bastla
bastla Dec 26, 2012 updated at 17:56:33 (UTC)
Goto Top
Hallo two-ak-two!
Es ist keine Liste von Ordnern.
Ich markiere eine davon
Dann sollte eigentlich
for /f "delims=" %%i in ("%~1\..") do set "ParentPath=%%~fi" & set "ParentName=%%~nxi"  
if not defined ParentName set "ParentName=Root"  
for %%i in (%*) do "c:\Program Files\7-Zip\7z.exe" a "%ParentPath%\%ParentName%.7z" %%i  
besser passen ...

Kurze Erklärung: Anhand der ersten übergebenen Datei / des ersten übergebenen Ordners (%1) wird Pfad und Name des Ordners ermittelt (siehe dazu "for /?", gegen Ende der Ausgabe), in welchem sich diese Datei / dieser Order befinden. Sollte dies ein "Root"-Ordner (etwa "D:\") sein, gibt es natürlich keinen Ordnernamen, sodass in Zeile 2 ein Name für diesen Fall festgelegt wird.

Zeile 3 sorgt dafür, dass auch mehrere Dateien / Ordner verarbeitet werden können, indem eine Schleife über alle Übergabeparameter (%* = alle Dateien / Ordner) läuft und jeweils die Datei / den Ordner in das gleiche Archiv packt.

Grüße
bastla
Member: two-ak-two
two-ak-two Dec 26, 2012, updated at Jan 01, 2013 at 21:44:05 (UTC)
Goto Top
hallo bastla,

mit dem Befehl wird alles aus dem "Ordner1" in ein Archiv gepackt und auf dem Desktop abgelegt und der Name des Archivs ist dann Desktop.7z (war so nicht gedacht).

Ich möchte gerne aus den Ordner, der gerade geöffnet ist, alle Dateien in ein Archiv packen, den Namen des Ordners übernehmen und das Archiv auch da erstellen. Nicht aber auf den Desktop.

Zitat von @bastla:
Dann sollte eigentlich
for /f "delims=" %%i in ("%~1\..") do set "ParentPath=%%~fi" & set  
"ParentName=%%~nxi"  
if not defined ParentName set "ParentName=Root"  
for %%i in (%*) do "c:\Program Files\7-Zip\7z.exe" a "%ParentPath%\%ParentName%.7z" %%i  
back-to-topdie Zeilen habe ich sonst nirgendwo gesehen, dabei war ich 6 Monate am suchen. Es wird der Absolute Pfad festgelegt, siehe SET Befehl. Offiziel gibt auch keine Lösung, nur bei der 7-zip 9.30 Alpha als switch und da funtioniert es noch nicht Perfekt (Danke @bastla)
1. Deine Batch packt alles, übenimmt den Namen Desktop und legt das Archiv auch dort ab.
wurde erklärt wieso und ist Normal wenn sich der Ordner1 auf dem Desktop befindet.

2.Meine Batch packt alles, übernimmt den Namen des Ordners und legt das Archiv auch auf dem Desktop ab.
back-to-topkann mann besser lösen

Mir ist klar das mann für diese Aktion auch das 7-zip Kontext Menü benutzen sollte, möchte ich aber nicht.
Es geht auch ganz einfach mit dem Winrar Kontext Menü und einem selbst erstelltem Profil, möchte ich auch nicht.

Mit Batch und CMD ist es super, mann braucht nicht rumklicken, passwort vergeben, Archivart wählen, Archivgröße bestimmen usw.

Danke für deine Zeit

Gruß
two-ak-two
Member: bastla
bastla Dec 27, 2012 updated at 10:03:52 (UTC)
Goto Top
Hallo two-ak-two!

Ich weiß zwar nicht, wie Du testest, aber wenn ich meine 3 Zeilen oben (unter W7Pro) als "C:\Users\bastla\AppData\Roaming\Microsoft\Windows\SendTo\Make7z.cmd" speichere, danach in einem Ordner "Ordner1" (Pfad zu diesem Ordner egal) eine Datei markiere und per "Senden an" an den Batch ("Make7z.cmd") übergebe, wird in diesem "Ordner1" eine "Ordner1.7z" erstellt und in dieses Archiv die markierte Datei gepackt - der Desktop ist dabei überhaupt nicht beteiligt.

Dass übrigens auch mehrere Dateien und/oder Ordner in einem Arbeitsgang verarbeitet werden können, ist nur eine zusätzliche Mögichkeit - es kann auch Datei für Datei einzeln auf diese Weise in das Archiv gepackt werden ...
[Edit] Solltest Du allerdings Deinen "Ordner1" auf dem Desktop liegen haben und eben diesen "Ordner1" an den Batch übergeben, ist es natürlich klar, dass dann ein Archiv "Desktop.7z" entsteht, in das der gesamte "Ordner1" gepackt wird. [/Edit]

Grüße
bastla
Member: two-ak-two
two-ak-two Dec 28, 2012, updated at Jan 01, 2013 at 21:47:38 (UTC)
Goto Top
hallo bastla,
Zitat von @bastla:
Hallo two-ak-two!

Ich weiß zwar nicht, wie Du testest,
wie Du, ich teste mit allen verfügbaren Datei Formaten.
  • SendTo Make7z.cmd funktioniert und ein CMD Fenster reicht aus.
  • Verweiß zur Make7z.cmd aus dem Kontext Menü funktioniert nur mit einer Datei.
mehrere Dateien bedeuten mehrere CMD Fenster und Archiv wird manchmal korrekt gepackt, dann manchmal unvollständig.
back-to-topShell Erweiterung x64
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Make7z]
@="°Make7z"  
"Icon"="%ProgramFiles%\\7-Zip\\7zFM.exe,0"  

[HKEY_CLASSES_ROOT\Folder\shell\°7zip\command]
@="\"C:\\Users\\****\\AppData\\Roaming\\Microsoft\\Windows\\SendTo\\Make7z.cmd\" %1"  
aber wenn ich meine 3 Zeilen oben (unter W7Pro) als
"C:\Users\bastla\AppData\Roaming\Microsoft\Windows\SendTo\Make7z.cmd" speichere, danach in einem Ordner
"Ordner1" (Pfad zu diesem Ordner egal) eine Datei markiere und per "Senden an" an den Batch
("Make7z.cmd") übergebe, wird in diesem "Ordner1" eine "Ordner1.7z" erstellt und in dieses
Archiv die markierte Datei gepackt - der Desktop ist dabei überhaupt nicht beteiligt.
ja, das funktioniert auch soweit Perfekt, vorausgesetzt:
  • nur eine Datei wird markiert, das geht soweit bis mann alle Dateien durch hat. die werden auch in das Archiv gepackt, also das archiv wird Aktualisiert.
  • wenn mehrere markiert werden und es sind Windows sfx und cab Dateien oder entpackbare Installshield exen vorhanden wird die For schleife abgearbeitet mit Fehlern.
  • Fehler Merkmale "Error Datei ist schon vorhanden" Archiv ist unvollständig oder "Archiv ist existiert schon"
  • Wenn beim 7zip switches im Befehl eingebaut werden geht es in die Hose. Ordner1.7z wird gepackt der unvolständig ist und Ordner1.7z.tmp wird nicht verarbeitet. In dem ist dann der Rest des Archivs.
back-to-topVerwendete 7-zip switches
-mx0 -v100m -x

Dass übrigens auch mehrere Dateien und/oder Ordner in einem Arbeitsgang verarbeitet werden können, ist nur eine
zusätzliche Mögichkeit - es kann auch Datei für Datei einzeln auf diese Weise in das Archiv gepackt werden ...
[Edit] Solltest Du allerdings Deinen "Ordner1" auf dem Desktop liegen haben und eben diesen
"Ordner1"
an den Batch übergeben, ist es natürlich klar, dass dann ein Archiv "Desktop.7z"
entsteht, in das der gesamte "Ordner1" gepackt wird.[/Edit]
ja das stimmt und das hat mich Nerven gekostet bis Du es halt gepostet hast face-smile


Grüße
bastla
Gruß zurück


wie schon gesagt, die zwei Zeilen funtionieren Perfekt. Der Nachteil ist das halt alles korrekt in den übergeordnetem Pfad gepackt wird.
  • 1. Zeile ist von dir
  • 2. Zeile, keine Ahnung
  • switches werden verarbeitet
  • das wichtigste -es werden alle Dateien gnadenlos gepackt face-smile
back-to-topBester Batch mit Kompromiss [EDIT]durch die zusätlichen Zeilen ist es für mich Perfekt[/EDIT]
@echo off
set "7zNAME=%CD%"  
echo %CD%
FOR /d %%X in (7zNAME) do "c:\Program Files\7-Zip\7z.exe" a -mx0 -v100m -x!test.txt "%cd%".zip > test.txt && "c:\Program Files\7-Zip\7z.exe" t "%cd%.zip.*" >> test.txt  
move "%cd%.zip.*" "%ParentPath%"  

  • "Es werden alle Dateien gepackt, getestet und wieder in den Ursprungspfad verschoben, so wie gewünscht. Dabei werden nur die
back-to-top.zip
Dateien mit Erweiterung berücksichtigt! Der Name Ordners kann auch z.B. so
back-to-topOrdner1 Ordner1&Ordner1. Ordner1
benannt werden und das Archiv wird korrekt erstellt