1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

FTP upload per Bat

Discussion in 'Programmieren' started by Rehtsel, Oct 18, 2001.

Thread Status:
Not open for further replies.
  1. Rehtsel

    Rehtsel ROM

    Guten Tag

    Ich habe eine Frage. Und zwar, wie kann ich nur den Namen einer Datei auf einen FTP-Server hochladen???
    Hiermit:
    @echo off
    ftp
    open -SERVER.de-
    -LOGIN-
    -PASSWORT-

    put -datei-

    quit
    cls

    kann man herlich auf den FTP-Server gehen und bei put etwas hochladen. Ich will aber die bat-Datei in das Senden an-Menü machen und so soll dann wenn ich eine irgendwas.doc oder eine tollesbild.bmp an die bat sende auf dem Server eine Textdatei irgendwas.doc.txt bzw. tollesbild.jpg.txt (oder ohne .dov/.jpg) erscheinen, in der dann wenn möglich das upload Datum stehst, muss aber nicht, es reicht auch ohne das. Es soll einfach eine TXT mit 0kb (wenn ohne Text) mit dem Dateinamen der gesendeten Datei auf dem Server erscheinen.

    Im voraus danke für eine Hilfe
    Thomas
     
  2. kazhar

    kazhar Viertel Gigabyte

    Hallo HL,
    Das mit dem Passwort hat sich schon erledigt - Ich habs gleich gemerkt. Diese automatische Benachrichtigung ist ist ein "Hund" ;)
     
  3. HLange

    HLange Kbyte

    Zu den Leerzeichen in Dateinamen wüßte ich nichts, womit man das Problem beheben könnte. Ansonsten: Deine Struktur, die quasi Prozeduren ermöglicht, finde ich genial; wär ich nie drauf gekommen. Deshalb hatte ich auch mit ner zweiten Batch-Datei gearbeitet. Interessant sind auch die Unterschiede zwischen Win9x und NT/2000. So funktioniert bei mir (Win98) wie oben schon erwähnt der Parameter /T bei Time und date nicht; desgleichen /Q im del-Befehl. Das einzige Problem das ich hatte war, daß "copy nul C:\transfer\gefunden.MAK" keine Datei erzeugte; mußte ich durch "echo 1 > C:\transfer\gefunden.MAK" ersetzen. Eine Sache würde ich in Deiner Batch ergänzen:
    for %%a in (%1\*.*) do call %0 %%a Datei
    berücksichtigt lediglich Dateinamen, die einen Punkt (also eine Endung) haben.

    for %%a in (%1\*) do call %0 %%a Datei
    sollte als zweite Zeile mit hinzugenommen werden.

    mfg Henning

    post scriptum: Danke für Deinen Benutzernamen sowie Dein Paßwort; kann man immer gebrauchen.
     
  4. Rehtsel

    Rehtsel ROM

    Katzer und Hlange. Ihr seid genial.
    Damit lässt sich wirklich ohne Probleme die Namen der Dateien hochladen. Somit wurde mir vielviel Arbeit mit dem immer neuen erstellen und umbennen erspart.
    Zum ersten Beitrag: Das ich das geschrieben nicht direkt in einer bat Datei luafen lassen kann war klar, aber vom Sinn her hats gepasst.
     
  5. kazhar

    kazhar Viertel Gigabyte

    <stolz>Es ist nur EINE Datei!! Sie kann auch zwischen Dateien und Verzeichnissen unterscheiden. Weiß sogar, wann sie nichts zum Übertragen gefunden hat! </stolz>
    Ich habe das Suchen und das Schreiben in die Steuerdatei getrennt; Erleichtert auch nacher das Aufräumen (löschen der yyyyyyy.xxx.txt usw)

    Einziger Nachteil: Sie hat _echte_ Probleme mit Datei oder Verzeichnisnamen mit Leerzeichen darin. Bin nicht daraufgekommen, wie man das löst!

    %windir%\SendTo\ftp.bat:

    @echo off
    if %1.==. goto Fehler
    if %2.==. goto Beginn
    goto %2

    :Beginn
    echo Erzeuge das Transfer-Verzeichnis...
    md C:\transfer
    echo Suche nach Dateien...
    call %0 %1 Rekurse
    echo Ueberpruefe, ob ueberhaupt was gefunden wurde...
    if not Exist C:\transfer\gefunden.MAK goto KeineDatei
    del C:\transfer\gefunden.MAK
    echo JA! Schreibe FTP-Steuer-Datei...
    echo open server.com> C:\ftp.txt
    echo name>> C:\ftp.txt
    echo pass>> C:\ftp.txt
    for %%a in (C:\transfer\*.*) do echo PUT %%a>> C:\ftp.txt
    echo quit>> C:\ftp.txt
    echo Starte Upload...
    ftp -s:C:\ftp.txt
    echo Raeume auf...
    del C:\ftp.txt
    del C:\transfer\*.* /Q
    rd C:\transfer
    pause
    goto Ende

    :Rekurse
    echo Untersuche die Eingabe
    IF Exist %1\nul call %0 %1 Verzeichnis
    IF NOT Exist %1\nul call %0 %1 Datei
    goto Ende

    :Verzeichnis
    echo Eingabe ist ein Verzeichnis; suche Dateien...
    for %%a in (%1\*.*) do call %0 %%a Datei
    goto Ende

    : Datei
    for %%a in (%1) do call %0 %%a TuEs
    goto Ende

    :TuEs
    echo Datei %1 gefunden
    copy nul C:\transfer\gefunden.MAK > nul
    date /T > %1.txt
    time /T >> %1.txt
    move %1.txt C:\transfer > nul
    goto Ende

    :KeineDatei
    rd C:\transfer
    echo NEIN! Sorry keine Datei gefunden, auf die "%1" zutrifft!
    echo.
    pause
    goto Ende

    :Fehler
    echo %0 - das untimative FTP-Batch!!
    echo Syntax: %0 Dateiname
    echo.

    :Ende

    Viel spass damit, KazHar

    Übrigens, ich bin gerade draufgekommen, daß in der Steuerdatei keine Leerzeichen nach Benutzername und Passwort sein sollten! daher habe ich alle echo xxx >> C:\ftp.txt in echo xxx>> C:\ftp.txt geändert.

    [Diese Nachricht wurde von kazhar am 19.10.2001 | 15:42 geändert.]
     
  6. kazhar

    kazhar Viertel Gigabyte

    Hi HL!

    der Parameter /T bewirkt unter Win NT und Win 2000 (und möglicherweise auch XP), daß time bzw date nur die Zeit bzw das Datum augeben und nicht auf eingaben o.Ä. warten, sonst nix.

    Dein Listing gefällt mir übrigens nicht schlecht. Werde aber sicher noch etwas dran rumtüfteln ;P

    mfg KazHar
     
  7. HLange

    HLange Kbyte

    Hallo Kazhar!

    ich habe mal etwas weitergearbeitet und habe nun zwei Batch-Dateien - weniger waren nicht möglich da zweimal ">" in einer Zeile Schwierigkeiten bereiten. Hiermit ist es möglich, sowohl einzelne Dateien, als auch alle Dateien eines ganzen Verzeichnisses hochzuladen. Doch zuvor noch eine Frage zu dem Parameter /T bei time und date: Was soll dieser bewirken, denn bei mir nimmt er das als Eingabe und stellt fest, daß "/T" kein gültiges Datum ist.
    Nun aber zu den Listings:

    %windir%\SendTo\ftp.bat:

    echo open server.de > C:\ftp.txt
    echo User >> C:\ftp.txt
    echo Pass >> C:\ftp.txt

    IF Exist %1\nul goto dir

    IF not Exist %1\nul goto file

    goto ende

    :dir
    For %%f in (%1\*.*) do echo call C:\ftplist.bat %%f >> C:\listftp.bat
    goto ende

    :file
    echo call C:\ftplist.bat %1 >> C:\listftp.bat
    goto ende
    :ende

    call C:\listftp
    echo quit >> C:\ftp.txt
    ftp -s:C:\ftp.txt

    call C:\ftpdel.bat
    del C:\ftpdel.bat
    del C:\listftp.bat
    del C:\ftp.txt

    C:\ftplist.bat:

    copy %1 %1.txt
    date > %1.txt
    time >> %1.txt

    echo put %1.txt >> C:\ftp.txt
    echo del %1.txt >> C:\ftpdel.bat

    Ich wünsche Dir viel Spaß beim ausprobieren und würde mich sehr über Kritik freuen.

    mfg Henning Lange
    [Diese Nachricht wurde von HLange am 18.10.2001 | 23:49 geändert.]
     
  8. kazhar

    kazhar Viertel Gigabyte

    s erstellst, warum dann nicht auch den Rest?

    %windir%\sendto\ftp.bat:
    @echo off
    copy %1 %1.txt
    date /T > %1.txt
    time /T >> %1.txt
    echo open server.de > C:\ftp.txt
    echo USER xxx >> C:\ftp.txt
    echo PASS yyy >> C:\ftp.txt
    echo put %1.txt >> C:\ftp.txt
    echo quit >> C:\ftp.txt
    ftp -s:C:\ftp.txt
    del %1.txt
    del C:\ftp.txt

    Übrigens die Idee mit dem "copy %1 %1.txt" ist gut! Ich hätt\'s komplizierter gemacht.

    mfg Kazhar

    [Diese Nachricht wurde von kazhar am 18.10.2001 | 22:44 geändert.]
    [Diese Nachricht wurde von kazhar am 18.10.2001 | 22:44 geändert.]
     
  9. HLange

    HLange Kbyte

    Das Problem besteht darin, daß man nicht einfach die Befehle für FTP mit in die Batch-Datei nehmen kann; man muß also eine gesonderte Datei für FTP schreiben (lassen). Das Problem besteht nur darin, daß diese Datei jedesmal neu - der Dateiname der Datei, die hochgeladen werden soll, wechselt ja - erstellt werden muß.
    Doch hier die Skripte für Dich:

    %windir%\sendto\ftp.bat:

    copy %1 %1.txt
    echo. > %1.txt

    copy C:\ftp\ftp.1 C:\ftp\ftp.txt
    echo put %1.txt >> C:\ftp\ftp.txt
    type C:\ftp\ftp.2 >> C:\ftp\ftp.txt

    ftp -s:C:\ftp\ftp.txt

    del %1.txt

    Nun sind noch in C:\ftp zwei Dateien zu erstellen(ftp.1 + ftp.2)

    ftp.1 enthält alle Login Befehle für FTP:
    z.B:

    open server.de
    NAME
    PASSWORT

    In ftp.2 sind die Befehle zum schließen der Verbindung zu speichern;
    also:

    quit

    Funktionsprinzip:
    Die Batchdatei erstellt zuerst eine Kopie der Datei (Dateiname + ".txt").
    Danach wird der Inhalt dieser Datei gelöscht (Du wolltest es ja so).
    Nun wird eine Neue Datei erstellt (ftp.txt) die später an ftp gereicht wird. Sie setzt sich aus ftp.1 für den Login, dem put-Befehl mit der leeren Kopie und abschließend dem Logout aus ftp.2 zusammen.
    Nun wird FTP mit der Befehlsdatei (ftp.txt) aufgerufen.
    Die Datei wird darauf hochgeladen.
    Zum Schluß wird die Kopie gelöscht.

    Das "echo." der zweiten Zeile der ftp.bat (echo. > %1.txt) kannst Du durch "date" ersetzen. Wenn Du noch Die Uhrzeit haben willst erstelle eine weitere Zeile nach gleichem Schema mit "time" vorne. Nachteil: Die Befehle Date und Time erfordern jedesmal eine Eingabe (2*Eingabetaste).

    Achtung!!!! Die Batch-Datei funktioniert nur mit einer Datei zur Zeit.

    Ich hoffe ja, bei Dir klappt die Sache genauso gut wie bei mir - ansonsten melde Dich.

    mfg Henning Lange

    [Diese Nachricht wurde von HLange am 18.10.2001 | 19:16 geändert.]
    [Diese Nachricht wurde von HLange am 18.10.2001 | 19:25 geändert.]
     
  10. Rehtsel

    Rehtsel ROM

    ja, das ist klar, aber das Problem das ich hab ist ja im Moment, wie NUR der Dateiname und nicht die ganze Datei hochgeladen wird.
    Weil getestet hab ich das schon, ich bekomme es aber nicht hin, das der Dateiname übernommen wird und als leere Datei auf den Server geladen wird. Dazu bräuchte ich ein Tipp.
     
  11. Du musst die bat-Datei nach C:\Windows\Send To kopieren oder eine Verknüpfung dort erstellen.
     
  12. OdiSre

    OdiSre ROM

    Hallo, vielen Dank, die Hinweise haben mir sehr geholfen.

    Hier ein Auszug aus meiner Lösung, die KEINE SEPARATE TEXTDATE erfordert:

    @echo off
    (
    echo user Benutzername Kennwort
    echo binary
    echo hash
    echo verbose
    echo prompt
    echo mput %*
    echo quit
    ) | ftp -n ftp.server.de


    Klappt für mich.
     
  13. Witcher

    Witcher ROM


    Hallo,
    wie sieht das script den aus, wenn ich wirklich die Daten/Dateien übertragen möchte und nicht nur die namen der dateien ?

    was bedeuten die Parameter %0 %1 Rekures in dem Call-Befehl ?

    Für Eure Hilfe wäre ich sehr dankbar !

    Gruß
    Witcher
     
  14. huppe8067

    huppe8067 Kbyte

    Zum FTP Upload habe ich auch eine kleine Frage:
    Wie lassen sich bereits existierende Dateien automatisch überspringen? RAV'FTP überschreibt einfach die Dateien und CuteFTP fragt bei jeder einzelnen Datei ob es die Datei ersetzten soll? Geht es nicht irgendwie das Programm so einzustellen, alle bereits existierende Dateien zu belassen ohne Nachfrage?
     
  15. OdiSre

    OdiSre ROM

    Das Skript übeträgt Dateien: script.cmd c:\Test\*.txt "Mit Lücke.txt". Ersetze 'mput %*' mit 'mput "Datei zum übetragen.txt" c:\test\test.*' falls immer fix.

    hier
     
  16. OdiSre

    OdiSre ROM

    Nimm Filezilla
     
  17. Witcher

    Witcher ROM

    Ok, nicht schlecht. Wie sieht es bei dem Originalscript von ganz oben aus.

    Kannst DU mir da auch helfen ?

    Gruß
    Witcher
     
  18. OdiSre

    OdiSre ROM

    Nein, funktionierte bei mir nicht.
     
Thread Status:
Not open for further replies.

Share This Page