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?
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.
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.
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.
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
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
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
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.
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)
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 :)
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!
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...
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
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: