Dateien per Batch verschicken?
Ich bin gerade dabei, mir aus Langeweile das Programmieren von BAT-Dateien etwas beizubringen.
Nun bin ich in meinem Vorhaben an einen Punkt gestossen, an welchem ich einen Ordner an einen anderen PC schicken sollte, welcher sich nicht im gleichen Netzwerk befindet. Gibt es dazu irgendwelche Wege, beziehungsweise ist dies mit BATCH überhaupt möglich?
Ich stelle mir vor, dass es doch irgendeinen Weg geben muss; Mail, FTP, Cloud, ...
OPTIONAL: Falls der Ordner dafür erst noch in ein ZIP umgewandelt werden muss, wäre ich froh, wenn dies auch gleich noch erläutert werden kann.
Vielen Dank.
3 Antworten
die einfachste Variante als "Briefkasten" wäre ein für den Empfänger freigegebener Ordner auf einer Cloud (dropbox , GoogleDrive etc).
Dann brauchst Du lediglich Datei au Deinem Rechner in den betreffenden Ordner auf deinem Rechner kopieren, den Rest erledigt die Sychronisierung der Cloudsoftware.
So jetzt hatte ich meinen Kaffee und die zweite Option.
Der Reihe nach.
Ich weiß nicht wie Du normalerweise ein zip erzeugst (ich nutze 7zip).
Wenn ich eine Batch für andere schreibe generiere ich ihnen ein kleines VisualBasic-script, welches das erledigt.
...so funktioniert die Batch immer...
Du musst nur in der Zeile 3...
call :zip_it "D:\myFolder\*.*" %myzip%
... den Quellpfad ändern.
Versendet wird die Datei per Email .
Das erledigt eine Zeile Powerscript. (im folgenden Code wird die Zeile nur durch linefeed-masking übersichtlicher..)
Natürlich meldet Powershell einen Fehler, ich habe einen nicht existenten Smtp-Server eingetragen (trag den server von deinem Provider oder sonstwem ein).
Auch Empfänger und Absender sind falsch...
email_send.cmd:
@echo off
set "myzip="attach.zip"
call :zip_it "D:\myFolder\*.*" %myzip%
rem https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.utility/Send-MailMessage
rem https://stackoverflow.com/questions/709635/sending-mail-from-batch-file
powershell -ExecutionPolicy ByPass -Command Send-MailMessage ^
-SmtpServer server.address.name ^
-To someone@what.ever ^
-From erzesel@possibly.fake ^
-Subject Testing ^
-Body 'meine Dateien im Anhang... bye' ^
-Attachments %myzip%
pause
exit /b
:zip_it
:::Kopression::::
set source= "%~1"
set tempdir=%temp%\_cszip
mkdir %tempdir%
xcopy %source% %tempdir%
rem zipscript generieren.
echo Set objArgs = WScript.Arguments > %temp%\_zipIt.vbs
echo InputFolder = objArgs(0) >> %temp%\_zipIt.vbs
echo ZipFile = objArgs(1) >> %temp%\_zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> %temp%\_zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> %temp%\_zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> %temp%\_zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> %temp%\_zipIt.vbs
echo wScript.Sleep 2000 >> %temp%\_zipIt.vbs
rem ...und aufrufen
cscript %temp%\_zipIt.vbs "%tempdir%" "%~2"
rem aufraeumen
del %temp%\_zipIt.vbs
rmdir /s /q "%tempdir%"
exit /b
mfg
Würde sagen einfach den Ordner zu ner ZIP datei (oder ähnliches) und diese dann per Email versenden. Von der email aus kannst du diese Datei dann von überall wieder herunterladen
da bin ich leider überfragt, aber viel Glück dabei, hilfreichere antworten zu finden
Kann denn dieser Vorgang völlig automatisch über die BATCH ausgeführt werden? Mein Ziel ist es, das gesamte Prozedere komplett ohne nötige Einwirkung des Nutzers abzuwickeln.