cowboy
Goto Top

DOS FTP Upload von Dateien in unbekannten Unterordner

Hi,
habe eine Frage...
und zwar hab ich ne Batch Datei, welche eigentlich Bilder vom Ordner c:\users\%Username%\Pictures\ uploaden soll.
jetzt hab ich folgendes geschrieben:

@ftp -i -s:"%~f0"&GOTO:EOF
open irgendeinServer123.de.funpic.de
Username
Passwort
cd bilder
lcd ..
lcd Pictures
binary
mput *.*
bye

jetzt aber das problem: Die unterordner werden leider nicht mit geuploaded, weil es ja nur dateien uploaded...
hat jemand vielleicht eine lösung?
(ich hab nicht so viel ahnung von den automatisierten DOS :D also IF und sowas kann ich eig gar nich mit umgehen, weswegen es schön wäre, wenn man jede einzelne Zeile für mich erklären könnte und möglichst auch die parameter ... also ich kann ein bisschen Visual Basic, weswegen ihr mir nicht erklären müsst was ne variable ist und was ne variablendeklaration)

schonmal danke im vorraus
MfG Cowboy

[Edit Biber] Servernamen verallgemeinert [/Edit]^^

Content-Key: 161098

Url: https://administrator.de/contentid/161098

Printed on: April 25, 2024 at 20:04 o'clock

Member: bastla
bastla Feb 18, 2011 at 16:27:09 (UTC)
Goto Top
Hallo Cowboy und willkommen im Forum!

Falls ich das richtig verstanden habe, könnte es so gehen:
@echo off & setlocal
set "Bilder=D:\Pictures"  

set "Script=%temp%\upload.txt"  
> "%Script%" echo open Server  
>>"%Script%" echo Username  
>>"%Script%" echo Passwort  
>>"%Script%" echo cd bilder  
>>"%Script%" echo lcd "%Bilder%"  
>>"%Script%" echo binary  
for /f "delims=" %%i in ('dir /b /ad "%Bilder%"') do >>"%Script%" echo mput "%%i"  
>>"%Script%" echo mput *.*  
>>"%Script%" echo bye  
echo Scriptinhalt:
type "%Script%"  
pause
ftp -i -s:"%Script%"  
del "%Script%"  
wobei die Zeilen 14 bis 16 nur zum Testen da sind. Es würde sich übrigens anbieten, in Zeile 2 zunächst einen Pfad zu einem Testordner mit nur ein paar Bildern und 2 Unterordnern anzugeben - damit sollte schon deutlich werden, ob der Ablauf Deinen Vorstellungen entspricht.

Nachdem der Inhalt des Scripts auf dem Bildschirm ausgegeben wurde, kannst Du übrigens den tatsächlichen Upload noch per Strg + c bzw Strg + Pause-Taste verhindern ...

Noch eine kurze Erklärung des Ablaufes: Das Upload-Script wird erst zur Laufzeit im Temp-Ordner erstellt (und danach auch wieder gelöscht), damit alle Unterordner einzeln per "mput Ordnername" übertragen werden können. Dazu wird mit der "for /f"-Schleife jeder Unterordner des in %Bilder% stehenden Basispfades abgeklappert - wenn Du das nachvollziehen willst, einfach in einer CMD-Shell
for /f "delims=" %i in ('dir /b /ad "D:\Bilder"') do echo mput "%i"
eingeben - dabei wird nur eine Bildschirmausgabe erzeugt und nix erstellt oder hochgeladen. Bitte beachten: In einem Batch werden für Laufvariable einer Schleife (hier: %%i) 2 Prozentzeichen geschrieben, bei Direkteingabe an der Kommandozeile nur eines.

Grüße
bastla

P.S.: Die Zeile 5 musst Du natürlich an den Namen Deines Servers (den ich ganz nebenbei nicht hier veröffentlichen würde) anpassen ...
Member: Cowboy
Cowboy Feb 18, 2011 at 20:48:51 (UTC)
Goto Top
funktioniert leider nicht... es ladet trotzdem nur die bilder im hauptordner hoch...
also beim laden des Ordners Test231 kommt dann
ftp> mput "Test231"
"Fehler beim laden der lokalen Datei ???1."

ich denke, dass der fehler bei der zeile
for /f "delims=" %%i in ('dir /b /ad "%Bilder%"') do >>"%Script%" echo mput "%%i"
liegt... vielleicht eine andere variable als "%%i"...
hier das hier hab ich auch noch gefunden... weil "%%i" dann im kompletten pfad als "C:\Users\%Username%\Pictures\"Test231"\" angezeigt werden würde, was fehler hervorrufen würde...
aber wie ich das genau verändern muss weiss ich auch nicht genau face-sad
Member: bastla
bastla Feb 18, 2011 at 20:59:32 (UTC)
Goto Top
Hallo Cowboy!
vielleicht eine andere variable als "%%i"...
... bringt genau keinen Unterschied ...
weil "%%i" dann im kompletten pfad als "C:\Users\%Username%\Pictures\"Test231"\" angezeigt werden würde, was fehler hervorrufen würde...
Wird es aber nicht, was Du leicht nachvollziehen kannst, indem Du einen Blick in das (genau zu diesen Testzwecken angezeigte) Skript wirfst (oder einfach nur die Zeile
ftp> mput "Test231"
richtig interpretierst) ...
aber wie ich das genau verändern muss weiss ich auch nicht genau
No problem, musst Du ohnehin nicht ...face-wink
Vermutlich (ich habe das nicht getestet) wird mit
mput "Test231"
eben nicht, wie geplant, der Ordner übertragen, sondern "Test231" als Dateiname interpretiert, obwohl im Web die Behauptung
"Windows ftp client can do folders. Just do mput <foldername>"
zu finden war ...
Na gut, dann eben ganz ausführlich:
@echo off & setlocal
set "Bilder=D:\Pictures"  

set "Script=%temp%\upload.txt"  
> "%Script%" echo open Server  
>>"%Script%" echo Username  
>>"%Script%" echo Passwort  
>>"%Script%" echo cd bilder  
>>"%Script%" echo lcd "%Bilder%"  
>>"%Script%" echo binary  
for /f "delims=" %%i in ('dir /b /ad "%Bilder%"') do (  
    echo mkdir "%%i"  
    echo cd "%%i"  
    echo mput "%%i\*.*"  
    echo cd ..
)>>"%Script%"  
>>"%Script%" echo mput *.*  
>>"%Script%" echo bye  
echo Scriptinhalt:
type "%Script%"  
pause
ftp -i -s:"%Script%"  
del "%Script%"  
Grüße
bastla
Member: Cowboy
Cowboy Feb 19, 2011 at 09:59:45 (UTC)
Goto Top
Vielen Dank...
es hat jetzt geklappt... bis auf die parameter /f, /b, /ad... hab ich das programm sogar verstanden
wo lernt man sowas? face-smile ich würd auch gerne ein bisschen mehr mit skripts in den batchdateien arbeiten können...

aber sonst ist das problem gelöst^^ kann ich auch gut dafür verwenden, wenn ich an ner homepage schreibe oder so
Member: bastla
bastla Feb 19, 2011 at 10:26:43 (UTC)
Goto Top
Hallo Cowboy!

Freut mich, wenn's jetzt klappt ... face-smile
bis auf die parameter /f, /b, /ad... hab ich das programm sogar verstanden
Kannst Du ja einfach nachlesen: "dir /?", "for /?" - und dazu auch das passende Tutorial zur FOR-Schleife ...
wo lernt man sowas? face-smile
Na hier natürlich face-wink (und ansonsten, wie so vieles, by doing) ...

Grüße
bastla
Member: Cowboy
Cowboy Feb 19, 2011 at 13:42:30 (UTC)
Goto Top
thx nochmal für den link ^^