FTP per Batch

Gast #2508307
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?
#2508333
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.
#2508468
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.
Gast #2510194
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
Gast #2510722
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.
#2510855
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)
Gast #2511837
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 :)
Gast #2514510
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!
Gast #2514546
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...
#2514568
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
Gast #2514573
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
)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren