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, 4722 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 ..
Ähnliche Inhalte
Batch & Shell
Automatisch dateien die sich in einem Ordner befinden, zippen (6)

Frage von cdm1970 zum Thema Batch & Shell ...

Batch & Shell
Dateien mit fast gleichem Namen per Batch zippen (5)

Frage von tioloco zum Thema Batch & Shell ...

Entwicklung
gelöst Verzeichnise sichern mit batch datei (Win10) (13)

Frage von Limbach zum Thema Entwicklung ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Microsoft Office
Office Druck fehler (18)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (11)

Frage von RickTucker zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
Uninitialisierte Festplatte - Daten retten (11)

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

Windows Server
Zertifikat am DC erneuern funktioniert nicht (11)

Frage von takvorian zum Thema Windows Server ...