ahstax
Goto Top

Dateien mit SendTo zippen

Mehrere markierte Dateien in einem beliebigen Ordner sollen gezippt und mit einem Passwort verschlüsselt werden.

Hallo miteinander,

ich würde gerne eine, zwei oder mehrere viele markierte Dateien mittels der SendTo-Funktion (rechte Maustaste) einer Batch übergeben und die Dateien dann von dieser zippen lassen. Als Software zum Zippen verwende ich 7zip. Für eine einzige Datei funktioniert das mit folgendem Code:

@echo off
set DateiMitPfad=%1
cls
echo.
echo.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
cls
echo.
echo.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:
cls
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiMitPfad% -p%Passwort%  
net send %username% Fertig!


Nur bei mehreren Dateien, da klappts nicht... Es wird bei verwendung des vorstehenden Codes immer nur die Datei gezippt, die mit der rechten Maustaste angeklickt wurde, um den SendTo-Befehl auszuführen.

Deswegen hab ich mich mal bei Google usw "um"gelesen und meine neu gewonnenen Weisheiten in folgendem Code zusammengetragen:

@echo off

if %1. == . exit
set PARAMS=file:///%1
:loop
shift
if %1. == . goto send
set PARAMS=%PARAMS%,file:///%1
goto loop
:send

for /f "delims=file:///" %%a in (%params%) Do (  
	echo "dies ist %%a"  
	)

cls
echo.
echo.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
cls
echo.
echo.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:
cls
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiMitPfad% -p%Passwort%  
net send %username% Fertig!

Ich hab ja gehofft, dass es einfach würde...
Aber ne...
Folgende Probleme:
  1. Wird nur eine, drei, fünf (ungerade Anzahl) Datei(en) markiert, läuft der Code zwar durch und erstellt eine Zip-Datei, die ist aber leer.
  2. Sind mehr als eine Datei markiert, läuft der Code stockend. Er erkennt nach "goto loop" eine Pause, die m.E. doch erst viel Später sein sollte...?
  3. Sind zwei, vier, sechs (eine gerade Anzahl von) Dateien markiert, bricht der Code (kurz) nach "goto loop" ab.
  4. die Zeile
     echo "dies ist %%a"   
    erzeugt die Aussage, dass die Datei, deren Pfad in %%a liegt, nicht gefunden werden kann. Allerdings nur ein mal...

Sieht jemand einen/mehrere/die Fehler?
Wie könnte ich das eleganter angehen (sollte aber eine Batch bleiben)?

Ich freu mich jetzt schon auf Antworten. Bis dahin Danke schonmal!!!
Grüße,
Andreas

Content-ID: 159155

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

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

76109
76109 21.01.2011 um 13:59:21 Uhr
Goto Top
Hallo ahstax!

Den Shift darfst Du erst nach dem "set PARAMS=%PARAMS%,file:///%1" machen, weil der Shift ja sonst zuvor schon die nächste Variable in %1 reinschiebt.

Gruß Dieter
bastla
bastla 21.01.2011 um 14:35:33 Uhr
Goto Top
@Dieter
"shift" ist ok (siehe Zeile 4)
Grundsätzlich sollte das mit der Variablen %PARAM% klappen (falls es nicht zu viele Dateien bzw zu lange Pfade werden):
@echo off & setlocal
if %1.==. goto :eof

set PARAMS=%1
:loop
shift
if %1.==. goto send
set PARAMS=%PARAMS% %1
goto :loop

:send
cls
echo.
echo.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
echo.
echo.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:
cls
echo "%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -p%Passwort% "%userprofile%\desktop\%ZipName%.zip" %PARAMS%  
net send %username% Fertig!
Entspannter lässt sich das Ganze allerdings unter Verwendung einer temporären Datei abwickeln:
@echo off & setlocal
if %1.==. goto :eof

set Liste=%temp%\ZIPList.lst
>%Liste% echo %1
:loop
shift
if %1.==. goto send
>>%Liste% echo %1
goto :loop

:send
cls
echo.
echo.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
echo.
echo.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:
cls
echo "%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -p%Passwort% "%userprofile%\desktop\%ZipName%.zip" @%Liste%  
del %Liste%
net send %username% Fertig!
Beide Ansätze sind übrigens ungetestet ...

Nachtrag: Wenn die test- (und zeilen-) weise Ausgabe der Dateien gewünscht ist, im ersten Fall
for %%i in (%PARAMS%) do echo %%i
bzw in Variante 2 einfach
type %Liste%
- jeweils gefolgt von
pause
- nach der ":send"-Zeile einfügen.

Grüße
bastla
ahstax
ahstax 21.01.2011 um 15:59:29 Uhr
Goto Top
Hallo und Danke!

leider funktioniert das mit dem Sammeln nicht...
ich hab mal noch folgenden Weg probiert, scheitere aber am "%"...
Gibts dafür ne Lösung?

rem @echo off
set Anzahl=0

rem Dateiname abfragen
cls
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
rem Passwort abfragen
cls
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:

for %%i in (%*) do (
	rem call :Zaehler
	call :ZaehlerUndZipper
	)
goto :ende

:ZaehlerUndZipper
set /a Anzahl+=1
Set DateiNummer=^&;%Anzahl%
echo %DateiNummer%
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiNummer% -p%Passwort%  
goto :eof

:ende

Grüße,
Andreas
ahstax
ahstax 21.01.2011 um 16:49:44 Uhr
Goto Top
So, doch gelöst...

@echo off & setlocal

if %1.==. goto :eof

set Liste=%temp%\ZIPList.txt
>%Liste% echo %1
:loop
shift
if %1.==. goto send
>>%Liste% echo %1
goto :loop

:send
cls
echo.
echo.
echo.
echo.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben:
echo.
echo.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben:

for /f "tokens=*" %%A in (%Liste%) do (  
	Set DateiBezeichnung=%%A
	"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %%A -p%Passwort%   
	)
del %Liste%
net send %username% Die ausgewaehlte(n) Datei(en) wurden auf Ihrem Desktop dem verschluesselte Archiv %ZipName%.zip hinzugefuegt.

Der Vollständigkeit halber:
hier bekäme man die Datei 7za.exe (ich übernehme natürlich keine Garantie für die Datei/en, den/die Anbieter dieser usw... man kennt das ja...)

Danke auf jeden Fall für die Hinweise!!!!
Schönes Wochenende face-wink


Andreas
bastla
bastla 21.01.2011 um 18:31:15 Uhr
Goto Top
Hallo ahstax!

Das Sammeln sollte eigentlich doch funktionieren - und vielleicht klappt ja das Zippen, wenn aus Zeile 21 (oder aus Zeile 20 der ersten Variante) das Test-"echo" (sorry, hatte vergessen, darauf hinzuweisen, dass ich den Befehl nur anzeigen lassen wollte face-sad) entfernt wird ...

Grüße
bastla
ahstax
ahstax 22.01.2011 um 08:27:04 Uhr
Goto Top
Ave Bastla,

wird ein "BEfehl", vor dem "echo" steht, lediglich angezeigt und nicht ausgeführt? An und für sich wäre das ja logisch... und mir nicht aufgefallen... Ich probiers nochmal aus.

Hilfreich war in jedem Fall das "drüber Reden"...! face-wink

Grüße,
Andreas
bastla
bastla 22.01.2011 um 09:07:13 Uhr
Goto Top
Hallo ahstax!
wird ein "BEfehl", vor dem "echo" steht, lediglich angezeigt und nicht ausgeführt?
So ist es, wobei in der Anzeige Variablen bereits "aufgelöst", also durch ihren Wert ersetzt, sind - daher verwende ich ein solches "echo" schon fast automatisch für "kritische" Befehle (umbenennen, verschieben, löschen von Dateien - wäre hier aber nicht unbedingt nötig gewesen) ...

Grüße
bastla
Alforno
Alforno 05.07.2011 um 14:49:31 Uhr
Goto Top
@ahstax

Vielen Dank für das Skript, hat mir gerade sehr weitergeholfen.

mfg
Alforno