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

Dateien mit SendTo zippen

Frage Entwicklung Batch & Shell

Mitglied: ahstax

ahstax (Level 2) - Jetzt verbinden

21.01.2011 um 13:09 Uhr, 4682 Aufrufe, 8 Kommentare

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:

01.
@echo off 
02.
set DateiMitPfad=%1 
03.
cls 
04.
echo. 
05.
echo. 
06.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
07.
cls 
08.
echo. 
09.
echo. 
10.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
11.
cls 
12.
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiMitPfad% -p%Passwort% 
13.
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:

01.
@echo off 
02.
 
03.
if %1. == . exit 
04.
set PARAMS=file:///%1 
05.
:loop 
06.
shift 
07.
if %1. == . goto send 
08.
set PARAMS=%PARAMS%,file:///%1 
09.
goto loop 
10.
:send 
11.
 
12.
for /f "delims=file:///" %%a in (%params%) Do ( 
13.
	echo "dies ist %%a" 
14.
15.
 
16.
cls 
17.
echo. 
18.
echo. 
19.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
20.
cls 
21.
echo. 
22.
echo. 
23.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
24.
cls 
25.
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiMitPfad% -p%Passwort% 
26.
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
    01.
     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
Mitglied: 76109
21.01.2011 um 13:59 Uhr
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
Bitte warten ..
Mitglied: bastla
21.01.2011 um 14:35 Uhr
@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):
01.
@echo off & setlocal 
02.
if %1.==. goto :eof 
03.
 
04.
set PARAMS=%1 
05.
:loop 
06.
shift 
07.
if %1.==. goto send 
08.
set PARAMS=%PARAMS% %1 
09.
goto :loop 
10.
 
11.
:send 
12.
cls 
13.
echo. 
14.
echo. 
15.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
16.
echo. 
17.
echo. 
18.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
19.
cls 
20.
echo "%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -p%Passwort% "%userprofile%\desktop\%ZipName%.zip" %PARAMS% 
21.
net send %username% Fertig!
Entspannter lässt sich das Ganze allerdings unter Verwendung einer temporären Datei abwickeln:
01.
@echo off & setlocal 
02.
if %1.==. goto :eof 
03.
 
04.
set Liste=%temp%\ZIPList.lst 
05.
>%Liste% echo %1 
06.
:loop 
07.
shift 
08.
if %1.==. goto send 
09.
>>%Liste% echo %1 
10.
goto :loop 
11.
 
12.
:send 
13.
cls 
14.
echo. 
15.
echo. 
16.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
17.
echo. 
18.
echo. 
19.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
20.
cls 
21.
echo "%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -p%Passwort% "%userprofile%\desktop\%ZipName%.zip" @%Liste% 
22.
del %Liste% 
23.
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
Bitte warten ..
Mitglied: ahstax
21.01.2011 um 15:59 Uhr
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?

01.
rem @echo off 
02.
set Anzahl=0 
03.
 
04.
rem Dateiname abfragen 
05.
cls 
06.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
07.
rem Passwort abfragen 
08.
cls 
09.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
10.
 
11.
for %%i in (%*) do ( 
12.
	rem call :Zaehler 
13.
	call :ZaehlerUndZipper 
14.
15.
goto :ende 
16.
 
17.
:ZaehlerUndZipper 
18.
set /a Anzahl+=1 
19.
Set DateiNummer=^&;%Anzahl% 
20.
echo %DateiNummer% 
21.
"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %DateiNummer% -p%Passwort% 
22.
goto :eof 
23.
 
24.
:ende
Grüße,
Andreas
Bitte warten ..
Mitglied: ahstax
21.01.2011 um 16:49 Uhr
So, doch gelöst...

01.
@echo off & setlocal 
02.
 
03.
if %1.==. goto :eof 
04.
 
05.
set Liste=%temp%\ZIPList.txt 
06.
>%Liste% echo %1 
07.
:loop 
08.
shift 
09.
if %1.==. goto send 
10.
>>%Liste% echo %1 
11.
goto :loop 
12.
 
13.
:send 
14.
cls 
15.
echo. 
16.
echo. 
17.
echo. 
18.
echo. 
19.
set /p ZipName=Bitte Name der zu erzeugenden ZIP-Datei eingeben: 
20.
echo. 
21.
echo. 
22.
set /p Passwort=Bitte Verschluesselungs-Passwort eingeben: 
23.
 
24.
for /f "tokens=*" %%A in (%Liste%) do ( 
25.
	Set DateiBezeichnung=%%A 
26.
	"%programfiles%\7-zip\7Zip_Command_Line\7za.exe" a -tzip "%userprofile%\desktop\%ZipName%.zip" %%A -p%Passwort%  
27.
28.
del %Liste% 
29.
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


Andreas
Bitte warten ..
Mitglied: bastla
21.01.2011 um 18:31 Uhr
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 ) entfernt wird ...

Grüße
bastla
Bitte warten ..
Mitglied: ahstax
22.01.2011 um 08:27 Uhr
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"...!

Grüße,
Andreas
Bitte warten ..
Mitglied: bastla
22.01.2011 um 09:07 Uhr
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
Bitte warten ..
Mitglied: Alforno
05.07.2011 um 14:49 Uhr
@ahstax

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

mfg
Alforno
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
Kopierte Dateien im Hintergrund anzeigen (1)

Frage von MichiBLNN zum Thema Windows 7 ...

Festplatten, SSD, Raid
Reallocated sectors count: Welche Dateien befinden sich in den beschädigten Sektoren? (9)

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

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

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 ...