Bat-Script FTP bestimmte Dateien und Unterordner
Hallo Admins, vielen Dank für das tolle Forum. In meiner Branche hat es sehr oft nützlich geholfen. Aber nun hier eine Situation die ich leider hier noch nicht umsetzen konnte....
Mein Problem bzw. Umsetzungsversuch:
Ich möchte via .bat ein FTP-Upload umsetzen. Soweit kein Problem!
Jedoch möchte ich in einem bestimmten Ordner UND UNTERORDNER nur bestimmte Dateien hochladen.
Mit mput *.dateiendung auch kein Problem. Jedoch wirkt das nicht für alle weiteren Unterordner, und sind hier wohl auch mehrere hundert Dateien möglich, wobei ja mput ausfallen würde.
Ich habe es mal versucht mit *\*.dateiendung, aber das brachte auch nicht die Lösung.
Nun habe ich ein kleines Script geschrieben, welches mit alle *.dateiendungen in eine Textdatei (sehr unzuverlässig, siehe unten) exportiert. Diese lese ich dann wieder ein, und setze ein einfaches "put" davor. So habe ich einen kompletten Pfad und speichere dies dann in eine .ftp ab, welche dann mit:
ftp -v -s:datei.ftp abgearbeitet wird.
dir /b /s pfad\ *.jpg>%tmp%\files.txt
dir /b /s pfad\*.xml>>%tmp%\files.txt
dir /b /s pfad\*.html>>%tmp%\files.txt
dir /b /s pfad\*.php>>%tmp%\files.txt
dir /b /spfad\*.css>>%tmp%\files.txt
Wenn man die Ordnerstrucktur behalten könnte wäre das ein "nice to have", ist aber nicht zwingend erforderlich.....
Dieses setze ich wie schon oben beschrieben in die .ftp -> FOR /f %%f IN (%tmp%\files.txt) DO echo put %%f>>%tmp%\test.ftp
Somit zeigt er jedoch nicht nur alleine die Dateien, sondern auch den Pfad ohne Datei an.
Bsp:
C:\pfad\pfad2\datei.dateiendung (richtig)
C:\pfad\pfad2\file.dateiendung (richtig)
C:\pfad\pfad2\ (falsch)
Zusätzlich brichter den Pfad ab, sobald im Pfad ein leerzeichen enthalten ist.....
Weiterhin lädt er auch nicht alle Dateien hoch, sondern bricht irgentwann mal ab, ohne Fehlermeldung oder ersichtlichen Grund.
Mit diesem Script bin ich swoeit nicht zufrieden, weil es meiner Meinung nach sehr unzuverlässig ist und Fehler schlecht vorbeugen kann..... (was natütlich an meiner mangelder Scriptrfähigkeit zurückzuführen ist)
Kann mir jemand bitte eine Lösungsansatz geben, wie ich mein Problem besser umsetzen kann....
Nochmal zur Wiederholung:
Ich habe einen bestimmten Ordner, und in diesem möchte ich bestimmte, vorher definierte Dateien hochladen. Dabei soll er auch nachfolgend alle Unterodner nach der selben Dateiendung absuchen und diese hochladen. Wie gesagt: Wenn man dabei die Ordnerstrucktir bebehalten könnte, wäre es super, ist aber kein muss!
Vielen Dank
MFG Heinrich
Mein Problem bzw. Umsetzungsversuch:
Ich möchte via .bat ein FTP-Upload umsetzen. Soweit kein Problem!
Jedoch möchte ich in einem bestimmten Ordner UND UNTERORDNER nur bestimmte Dateien hochladen.
Mit mput *.dateiendung auch kein Problem. Jedoch wirkt das nicht für alle weiteren Unterordner, und sind hier wohl auch mehrere hundert Dateien möglich, wobei ja mput ausfallen würde.
Ich habe es mal versucht mit *\*.dateiendung, aber das brachte auch nicht die Lösung.
Nun habe ich ein kleines Script geschrieben, welches mit alle *.dateiendungen in eine Textdatei (sehr unzuverlässig, siehe unten) exportiert. Diese lese ich dann wieder ein, und setze ein einfaches "put" davor. So habe ich einen kompletten Pfad und speichere dies dann in eine .ftp ab, welche dann mit:
ftp -v -s:datei.ftp abgearbeitet wird.
dir /b /s pfad\ *.jpg>%tmp%\files.txt
dir /b /s pfad\*.xml>>%tmp%\files.txt
dir /b /s pfad\*.html>>%tmp%\files.txt
dir /b /s pfad\*.php>>%tmp%\files.txt
dir /b /spfad\*.css>>%tmp%\files.txt
Wenn man die Ordnerstrucktur behalten könnte wäre das ein "nice to have", ist aber nicht zwingend erforderlich.....
Dieses setze ich wie schon oben beschrieben in die .ftp -> FOR /f %%f IN (%tmp%\files.txt) DO echo put %%f>>%tmp%\test.ftp
Somit zeigt er jedoch nicht nur alleine die Dateien, sondern auch den Pfad ohne Datei an.
Bsp:
C:\pfad\pfad2\datei.dateiendung (richtig)
C:\pfad\pfad2\file.dateiendung (richtig)
C:\pfad\pfad2\ (falsch)
Zusätzlich brichter den Pfad ab, sobald im Pfad ein leerzeichen enthalten ist.....
Weiterhin lädt er auch nicht alle Dateien hoch, sondern bricht irgentwann mal ab, ohne Fehlermeldung oder ersichtlichen Grund.
Mit diesem Script bin ich swoeit nicht zufrieden, weil es meiner Meinung nach sehr unzuverlässig ist und Fehler schlecht vorbeugen kann..... (was natütlich an meiner mangelder Scriptrfähigkeit zurückzuführen ist)
Kann mir jemand bitte eine Lösungsansatz geben, wie ich mein Problem besser umsetzen kann....
Nochmal zur Wiederholung:
Ich habe einen bestimmten Ordner, und in diesem möchte ich bestimmte, vorher definierte Dateien hochladen. Dabei soll er auch nachfolgend alle Unterodner nach der selben Dateiendung absuchen und diese hochladen. Wie gesagt: Wenn man dabei die Ordnerstrucktir bebehalten könnte, wäre es super, ist aber kein muss!
Vielen Dank
MFG Heinrich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174820
Url: https://administrator.de/forum/bat-script-ftp-bestimmte-dateien-und-unterordner-174820.html
Ausgedruckt am: 25.12.2024 um 02:12 Uhr
3 Kommentare
Neuester Kommentar
Hallo SGW-entertainment und willkommen im Forum!
Einigen der Probleme sollte mit etwas Genauigkeit beizukommen sein:
sollte zB (aufgrund des entfernten überzähligen Leerzeichens in Zeile 1 und weil zusätzlich Verzeichnisse ausdrücklich ausgeschlossen werden) nur noch passende Dateien in die Liste aufnehmen (wobei
auch schon genügen sollte) ...
Dem Leerzeichenproblem in Pfad-/Dateinamen solltest Du damit beikommen:
Zu den Abbrüchen kann ich allerdings nix sagen ...
Grüße
bastla
P.S.: Darf ich Dir die Verwendung der "Code"- (lässt sich auch nachträglich noch einfügen ) nahe legen?
Einigen der Probleme sollte mit etwas Genauigkeit beizukommen sein:
>%tmp%\files.txt dir /b /s /a-d pfad\*.jpg
>>%tmp%\files.txt dir /b /s /a-d pfad\*.xml
>>%tmp%\files.txt dir /b /s /a-d pfad\*.html
>>%tmp%\files.txt dir /b /s /a-d pfad\*.php
>>%tmp%\files.txt dir /b /s /a-d pfad\*.css
pushd pfad
>%tmp%\files.txt dir /b /s /a-d *.jpg *.xml *.html *.php *.css
popd
Dem Leerzeichenproblem in Pfad-/Dateinamen solltest Du damit beikommen:
for /f "delims=" %%f in (%tmp%\files.txt) do echo put "%%f">>%tmp%\test.ftp
Grüße
bastla
P.S.: Darf ich Dir die Verwendung der "Code"- (lässt sich auch nachträglich noch einfügen ) nahe legen?