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:
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:
Ich hab ja gehofft, dass es einfach würde...
Aber ne...
Folgende Probleme:
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
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:
- 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.
- 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...?
- Sind zwei, vier, sechs (eine gerade Anzahl von) Dateien markiert, bricht der Code (kurz) nach "goto loop" ab.
- die Zeile erzeugt die Aussage, dass die Datei, deren Pfad in %%a liegt, nicht gefunden werden kann. Allerdings nur ein mal...
echo "dies ist %%a"
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159155
Url: https://administrator.de/contentid/159155
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
8 Kommentare
Neuester Kommentar
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
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
@Dieter
"
Grundsätzlich sollte das mit der Variablen %PARAM% klappen (falls es nicht zu viele Dateien bzw zu lange Pfade werden):
Entspannter lässt sich das Ganze allerdings unter Verwendung einer temporären Datei abwickeln:
Beide Ansätze sind übrigens ungetestet ...
Nachtrag: Wenn die test- (und zeilen-) weise Ausgabe der Dateien gewünscht ist, im ersten Fall
bzw in Variante 2 einfach
- jeweils gefolgt von
- nach der "
Grüße
bastla
"
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!
@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!
Nachtrag: Wenn die test- (und zeilen-) weise Ausgabe der Dateien gewünscht ist, im ersten Fall
for %%i in (%PARAMS%) do echo %%i
type %Liste%
pause
:send
"-Zeile einfügen.Grüße
bastla
Hallo ahstax!
Grüße
bastla
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