Forum: PC-Programmierung FTP per Batch


von Lugge (Gast)


Lesenswert?

Servus,

ich würde gerne per Batchdatei eine Abfolge von FTP Aktionen 
automatisieren.

Soweit kein Problem.

Ich brauch dazu eine .bat Datei sowei eine Scriptdatei, die ich an den 
ftp-Aufruf übergebe. In dieser stehen die ftp Befehle.

Bsp:

ftp --s:script.txt

Nur kennt mein ftp den Parameter -s nicht :/

Benutze noch WinXP (aktuelles SP). Sollte laut Internetsuche funzen.
Aufruf von
ftp --help
zeigt mir dass nur die Parameter d, g, i, n, t, p und v verfügbar sind.

Weis jemand hier weiter?

von Peter II (Gast)


Lesenswert?

Lugge schrieb:
> Weis jemand hier weiter?
ja

ftp < script.txt

von Lugge (Gast)


Lesenswert?

Danke für diese schnelle und 100% perfekt funktionierende Antwort :)

Grüße, Lugge

von Volker Z. (vza)


Lesenswert?

Bei mir ist -s  dabei.
1
C:\etree_toolbox\mot_files>ver
2
3
Microsoft Windows XP [Version 5.1.2600]
4
5
C:\etree_toolbox\mot_files>ftp --?
6
7
Transfers files to and from a computer running an FTP server service
8
(sometimes called a daemon). Ftp can be used interactively.
9
10
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host]
11
12
  -v             Suppresses display of remote server responses.
13
  -n             Suppresses auto-login upon initial connection.
14
  -i             Turns off interactive prompting during multiple file
15
                 transfers.
16
  -d             Enables debugging.
17
  -g             Disables filename globbing (see GLOB command).
18
  -s:filename    Specifies a text file containing FTP commands; the
19
                 commands will automatically run after FTP starts.
20
  -a             Use any local interface when binding data connection.
21
  -A             login as anonymous.
22
  -w:buffersize  Overrides the default transfer buffer size of 4096.
23
  host           Specifies the host name or IP address of the remote
24
                 host to connect to.
25
26
Notes:
27
  - mget and mput commands take y/n/q for yes/no/quit.
28
  - Use Control-C to abort commands.

von Robert L. (lrlr)


Lesenswert?

>ftp --s:script.txt

aber --s nicht

von Lugge (Gast)


Lesenswert?

Robert L. schrieb:
> aber --s nicht

Is Wurscht, habs auch mit -s probiert.

ftp --version liefert: "ftp <GNU inetutils> 1.3.2"
Benutze also nicht die Windowsversion, warum auch immer.

Aber auf die Software hier am Arbeitsrechner hab ich herzlich wenig 
Einfluss.

von Klaus W. (mfgkw)


Lesenswert?

Um aus Shellskripten oder Batchdateien ftp zu machen, nehme ich meistens 
ncftp.
Dabei sind die Programm ncftpput und ncftpget, mit denen das alles viel 
einfacher geht: jedes get und put wird zu je einer Zeile, in der alles 
übergeben werdenkann, was man so braucht.

Das spart die ganze Eingabeumlenkerei und damit die Problem mit 
unterschiedlichen ftp-Servern.

Das gibt es für Linux und Windows.

von Volkmar D. (volkmar)


Lesenswert?

Lugge schrieb:
> Aber auf die Software hier am Arbeitsrechner hab ich herzlich wenig
> Einfluss.

Und wenn Du die XP-Variante von ftp mit direkter Pfadangabe aufrufst? 
Aber Du hast ja schon eine Lösung.

von Lugge (Gast)


Lesenswert?

Volkmar Dierkes schrieb:
> Und wenn Du die XP-Variante von ftp mit direkter Pfadangabe aufrufst?

Genau dass mach ich jetzt auch, danke für den Tipp!

Hatte nämlich noch das Problem dass mir der GNU ftp (der war anscheinend 
bei cygwin dabei) keinen Backslash gefressen hat.
Aus "C:\test.txt" wurde dann "C:test.txt", was natürlich nicht gefunden 
wurde.
Und bevor ich hier wieder nen Workaround such, benutz ich jetzt gleich 
die ftp.exe im system32 Ordner :)

Nur ein Problem hab ich noch:
Pfadangaben können Leerzeichen enthalten.

Ein

IF "%1" == "" (
---tu was---
)

liefert dann einen Syntax Error.
Das Quoten von %1 alleine reicht nicht, da der Kommandozeileninterpreter 
laut Internetrecherche ein " als normalen Buchstaben wertet.
Das Quoten verhindert nur einen Syntax Error falls %1 leer ist.
(=> IF "" == "")

Doch bei Leerzeichen im Pfad %1 bricht er mir trotzdem ab, kann man 
Leerzeichen irgendwie escapen?

Grüße,
Lugge

von Klaus O. (owo)


Lesenswert?

Hier ist ein Beispiel (Datei senden):

1. Batchdatei z.B.:ftp.bat
Inhalt:       ftp -s:f:\ftpscript.ftp
              pause
2. ftp-Scriptdatei ist f:\ftpscript.ftp

Inhalt:   open ftp.webseite.de
            benutzername
            passwort
          lcd verzeichnis auf Pc
          cd verzeichnis  auf ftp-Serv.
          binary
          put quelldatei zieldatei
          quit

von Lugge (Gast)


Lesenswert?

Danke, aber das Beispiel hat rein gar nichts mit meiner Frage zu tun :)
Ganzen Thread lesen :)

von Volkmar D. (volkmar)


Lesenswert?

Lugge schrieb:
> Das Quoten von %1 alleine reicht nicht,

%1 sucht ja immer bis zum nächsten Leerzeichen (evtl. auch TAB oder so, 
bin mir nicht sicher). Damit die Pfadangabe aber auch als ein 
zusammenhängender Parameter erkannt wird, würde ich die Pfadangabe des 
Aufrufs schon mit "" escapen.

Volkmar

von Andreas D. (rackandboneman)


Lesenswert?

curl kann FTP Uploads und Downloads; evtl muss man halt individuelle 
Aufrufe in die Datei geben und diese selbst als Skript/Batch aufrufen...

von Lugge (Gast)


Lesenswert?

Volkmar Dierkes schrieb:
> Lugge schrieb:
>> Das Quoten von %1 alleine reicht nicht,
>
> %1 sucht ja immer bis zum nächsten Leerzeichen (evtl. auch TAB oder so,
> bin mir nicht sicher). Damit die Pfadangabe aber auch als ein
> zusammenhängender Parameter erkannt wird, würde ich die Pfadangabe des
> Aufrufs schon mit "" escapen.
>
> Volkmar

Ich quote ja schon, so siehts aus bei mir: "%1"
Aber aus einem anderen Grund.

Denn die "" bewirken in Batch Dateien leider nicht, dass Leerzeichen im 
enthaltenen String ignoriert werden.

"" hin oder her, sobald mein Pfad ein Leer enthält krieg ich nen Syntax 
Error.

von Karl H. (kbuchegg)


Lesenswert?

Lugge schrieb:
> Volkmar Dierkes schrieb:
>> Lugge schrieb:
>>> Das Quoten von %1 alleine reicht nicht,
>>
>> %1 sucht ja immer bis zum nächsten Leerzeichen (evtl. auch TAB oder so,
>> bin mir nicht sicher). Damit die Pfadangabe aber auch als ein
>> zusammenhängender Parameter erkannt wird, würde ich die Pfadangabe des
>> Aufrufs schon mit "" escapen.
>>
>> Volkmar
>
> Ich quote ja schon, so siehts aus bei mir: "%1"

Nicht hier.
Da ist es schon zu spät.

Deine Anweisungen stehen ja in einer Batch Datei (zb DOIT.BAT)
Die wird von irgendwo aufgerufen.

UNd dort musst du quoten

also nicht

$ DOIT  check.txt

sondern

$ DOIT "check.txt"


Denn sonst zerlegt dir der Argument Parser der Command Line deine 
Argumentliste falsch.

Aus
$ DOT check me.txt

macht der   check -> %1
            me.txt -> %2

Abhilfe

$ DOIT "check me.txt"

dann wird auch tatsächlich   check me.txt   -> %1


(Persönlich halte ich Leerzeichen in File oder Pfadnamen sowieso für 
Schwachsinn, für den man sofort an die Wand gestellt werden sollte. Aber 
das ist eine andere Geschichte)

von Lugge (Gast)


Lesenswert?

Danke Karl Heinz, des macht Sinn was du schreibst.

Allerdings rufe ich meine Batch nicht von der Kommandozeile auf.

Ich habe einen Datentyp damit verknüpft, ich muss also im Explorer nur 
mit Rechts auf die gewünschte Datei klicken und kann dann unter "Öffnen 
mit..." mein Upload Skript auswählen.

In der Arbeit haben wir natürlich in den Projektordnern keine 
Leerzeichen, mein Problem ist also mehr oder weniger der letzte 
Feinschliff, um zB Dateien aufn Desktop auswählen zu können...

Danke euch trotzdem allen :)

von Lugge (Gast)


Lesenswert?

So, ich nochmal.

Also ich gebs auf, dann kann man halt Dateien aufn Desktop nicht 
anwählen.

Hier nochmal der Code, der zu einem Syntaxfehler und damit zum Abbruch 
führt:
1
IF "%1" == "" (
2
  GOTO ASK_FOR_FILE_NAME
3
) ELSE (
4
  SET file=%1
5
  GOTO CHECK_FOR_FILE
6
)

Wenn noch jemand ne Idee hat, gerne her damit, ansonsten nochmal Danke 
an alle!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Lugge schrieb:
> Ich habe einen Datentyp damit verknüpft,
Auch dort muß der Parameter in Anführungszeichen stehen...

von Lugge (Gast)


Lesenswert?

Hups, sorry für die dumme Formulierung.

Natürlich hab ich ein Dateiformat damit verknüpft und kann eben durch 
Klick auf "Öffnen mit [Name_der_Batchdatei]" das Skript ausführen und 
den Dateinamen als Parameter übergeben. Allerdings habe ich ja bei 
dieser Art des Aufrufs keinen Einfluss, wie Windows den Dateinamen 
übergibt.

Ein Test mit einem ECHO Befehl gibt zumindest folgende Zeile aus:

"C:\test.txt"

Also scheint Windows Euren Rat zu beherzigen.
Trotzdem wirft mir der im vorrigen Beitrag gepostete Code einen 
Fehler...

von Volkmar D. (volkmar)


Lesenswert?

Ich habe folgenden Test gemacht:

Eine test.bat erstellt mit:
1
@echo off
2
echo %1
3
pause
Dann auf dem Desktop eine test.test erstellt und mit "Öffne mit" die 
test.bat ausgewählt. Folgende Ausgabe erhalte ich:
1
"C:\Documents and Settings\xxx\Desktop\test.test"
2
Drücken Sie eine beliebige Taste . . .
Also korrekt gequotet, sollte von daher also klappen.

Vielleicht mußt Du doch mal ein Beispiel mit Inhalt der Batch-Datei und 
der genauen Fehlermeldung posten.

Volkmar

von Lugge (Gast)


Lesenswert?

So ists bei mir auch. Windows scheint das Problem zu kennen und quotet 
den Pfad richtig. Auch bei mir liefert so eine Testdatei die selbe 
Ausgabe wie bei dir.

Aber sobald mein Skript die IF Abfrage erreicht bricht es mit folgender 
Meldung ab:

"und" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Hier nochmal der betreffende Code:
1
IF "%1" == "" (
2
  GOTO ASK_FOR_FILE_NAME
3
) ELSE (
4
  SET file=%1
5
  GOTO CHECK_FOR_FILE
6
)

von Volkmar D. (volkmar)


Lesenswert?

Habe mich nochmal etwas mit der Thematik beschäftigt und nun auch einen 
Syntaxfehler bei Deinem obigen Code erhalten. Versuche mal dieses:
1
IF ""%1"" == """" (
2
  GOTO ASK_FOR_FILE_NAME
3
) ELSE (
4
  SET file=%1
5
  GOTO CHECK_FOR_FILE
6
)

Mit dem doppelten Quote läuft es bei mir durch.

von Lugge (Gast)


Lesenswert?

Danke!

Mit dem doppelten Quote läufts auch bei mir :)

Grüße,
Lugge

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.