Prüfen, ob Zugriff auf mehrere FTP-Server möglich ist?
Hallo,
angenommen ich verwalte mehrere FTP-Server und diese haben mehrere Logins. Allerdings habe ich derzeit keinen Zugriff auf die Admin-Konsole.
Ich habe alle in einer Textdatei mit folgendem Aufbau:
username1:passwort1@ftp.server1.de
username2:passwort2@ftp.server1.de
username1:passwort1@ftp.server2.de
username2:passwort2@ftp.server2.de
Nun möchte ich nicht alle via copy/paste im Internet Explorer oder einem FTP-Programm einzeln prüfen.
Wie kann ich das mit Hilfe einer Batch-Datei vereinfachen?
Kann ich dies irgendwie mit Hilfe der ftp.exe in Windows/system32 machen?
angenommen ich verwalte mehrere FTP-Server und diese haben mehrere Logins. Allerdings habe ich derzeit keinen Zugriff auf die Admin-Konsole.
Ich habe alle in einer Textdatei mit folgendem Aufbau:
username1:passwort1@ftp.server1.de
username2:passwort2@ftp.server1.de
username1:passwort1@ftp.server2.de
username2:passwort2@ftp.server2.de
Nun möchte ich nicht alle via copy/paste im Internet Explorer oder einem FTP-Programm einzeln prüfen.
Wie kann ich das mit Hilfe einer Batch-Datei vereinfachen?
Kann ich dies irgendwie mit Hilfe der ftp.exe in Windows/system32 machen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148052
Url: https://administrator.de/forum/pruefen-ob-zugriff-auf-mehrere-ftp-server-moeglich-ist-148052.html
Ausgedruckt am: 22.05.2025 um 19:05 Uhr
4 Kommentare
Neuester Kommentar
Hallo batch0r,
hier ein Vorschlag zur Lösung Deines Problems. Ich gehe davon aus, daß Du die Anmeldeinformationen prüfen willst.
Erklärung:
Die äußere FOR-Schleife ließt die Datei servers.txt, die Deine o.g. FTP-Server und Login-Daten enthält, zeilenweise aus. Der Inhalt einer Zeile wird in seine Bestandteile zerlegt. delims=:@ gibt die Trennzeichen an. Die Laufvariable %%a enthält den Usernamen, %%b das Passwort und %%c die Serveradresse. %%b und %%c werden durch die Angabe von tokens=1-3 im Kopf der FOR-Schleife implizit erzeugt (siehe FOR /?, Erklärung zu FOR /F). Durch usebackq kann der Dateiname servers.txt in Anführungszeichen gesetzt werden und dadurch theoretisch auch Leerzeichen enthalten.
Die Werte werden durch die drei ECHO-Befehle am Anfang der FOR-Schleife zusammen mit FTP-Befehlen in die Datei ftpcmd.txt ins Verzeichnis %TEMP% für temporäre Dateien geschrieben. open %%c öffnet die Verbindung zum Server. user %%a %%b übermittelt die Login-Informationen. bye schließt die Verbindung und beedet den FTP-Befehl.
In der inneren FOR-Schleife wird der FTP-Befehl ausgeführt. Durch -n wird die automatische Anmeldung am Server unterdrückt, durch -s:"%TEMP%\ftpcmd.txt" holt sich der FTP-Befehl die FTP-Kommandos aus der eben erzeugten Datei. Durch 2^>NUL werden Fehlermeldungen nicht ausgegeben. Die normale Ausgabe des Befehls wird durch ^| an den FINDSTR-Befehl übergeben, der nach einer Zeile sucht, die mit dem Wert 230 beginnt. Das ist die Statusmeldung für eine erfolgreiche Anmeldung am FTP-Server.
Im nächsten Durchlauf der äußeren FOR-Schleife wird die Datei ftpcmd.txt mit den Daten vom nächsten Server neu angelegt und der Ablauf beginnt von neuem.
Am Schluß wird die Datei ftpcmd.txt wieder gelöscht.
Gruß
Friemler
hier ein Vorschlag zur Lösung Deines Problems. Ich gehe davon aus, daß Du die Anmeldeinformationen prüfen willst.
@echo off
setlocal
for /f "usebackq tokens=1-3 delims=:@" %%a in ("servers.txt") do (
echo open %%c>"%TEMP%\ftpcmd.txt"
echo user %%a %%b>>"%TEMP%\ftpcmd.txt"
echo bye>>"%TEMP%\ftpcmd.txt"
(for /f %%i in ('ftp -n -s:"%TEMP%\ftpcmd.txt" 2^>NUL ^| findstr /b /c:"230"') do (
echo Login auf %%c mit Username %%a, Passwort %%b war erfolgreich.
)) || echo Login auf %%c mit Username %%a, Passwort %%b war nicht erfolgreich.
)
del "%TEMP%\ftpcmd.txt"
endlocal
Erklärung:
Die äußere FOR-Schleife ließt die Datei servers.txt, die Deine o.g. FTP-Server und Login-Daten enthält, zeilenweise aus. Der Inhalt einer Zeile wird in seine Bestandteile zerlegt. delims=:@ gibt die Trennzeichen an. Die Laufvariable %%a enthält den Usernamen, %%b das Passwort und %%c die Serveradresse. %%b und %%c werden durch die Angabe von tokens=1-3 im Kopf der FOR-Schleife implizit erzeugt (siehe FOR /?, Erklärung zu FOR /F). Durch usebackq kann der Dateiname servers.txt in Anführungszeichen gesetzt werden und dadurch theoretisch auch Leerzeichen enthalten.
Die Werte werden durch die drei ECHO-Befehle am Anfang der FOR-Schleife zusammen mit FTP-Befehlen in die Datei ftpcmd.txt ins Verzeichnis %TEMP% für temporäre Dateien geschrieben. open %%c öffnet die Verbindung zum Server. user %%a %%b übermittelt die Login-Informationen. bye schließt die Verbindung und beedet den FTP-Befehl.
In der inneren FOR-Schleife wird der FTP-Befehl ausgeführt. Durch -n wird die automatische Anmeldung am Server unterdrückt, durch -s:"%TEMP%\ftpcmd.txt" holt sich der FTP-Befehl die FTP-Kommandos aus der eben erzeugten Datei. Durch 2^>NUL werden Fehlermeldungen nicht ausgegeben. Die normale Ausgabe des Befehls wird durch ^| an den FINDSTR-Befehl übergeben, der nach einer Zeile sucht, die mit dem Wert 230 beginnt. Das ist die Statusmeldung für eine erfolgreiche Anmeldung am FTP-Server.
Im nächsten Durchlauf der äußeren FOR-Schleife wird die Datei ftpcmd.txt mit den Daten vom nächsten Server neu angelegt und der Ablauf beginnt von neuem.
Am Schluß wird die Datei ftpcmd.txt wieder gelöscht.
Gruß
Friemler
@Friemler
Sieht gut aus
Aus optischen Gründen würde ich die Zeilen 6 bis 8 aber eher so schreiben:
Grüße
bastla
P.S.: "
Sieht gut aus
Aus optischen Gründen würde ich die Zeilen 6 bis 8 aber eher so schreiben:
> "%TEMP%\ftpcmd.txt" echo open %%c
>>"%TEMP%\ftpcmd.txt" echo user %%a %%b
>>"%TEMP%\ftpcmd.txt" echo bye
bastla
P.S.: "
endlocal
" wird am Ende des Batches automatisch ausgeführt ...
Hallo bastla,
Danke!
Interessant zu wissen, daß das auch funktioniert. Sieht auch besser aus. Danke.
Schon klar, aber das ist meine "Coding-Ästhetik": geöffnete Blöcke auch wieder schließen, mache ich in HTML wenn möglich auch.
Gruß
Friemler
Danke!
> "%TEMP%\ftpcmd.txt" echo open %%c
>>"%TEMP%\ftpcmd.txt" echo user %%a %%b
>>"%TEMP%\ftpcmd.txt" echo bye
Interessant zu wissen, daß das auch funktioniert. Sieht auch besser aus. Danke.
P.S.: "
endlocal
" wird am Ende des Batches automatisch ausgeführt ...Schon klar, aber das ist meine "Coding-Ästhetik": geöffnete Blöcke auch wieder schließen, mache ich in HTML wenn möglich auch.
Gruß
Friemler