batch0r
Goto Top

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?

Content-Key: 148052

Url: https://administrator.de/contentid/148052

Printed on: April 25, 2024 at 14:04 o'clock

Member: Friemler
Friemler Jul 31, 2010 at 21:15:20 (UTC)
Goto Top
Hallo batch0r,

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
Member: bastla
bastla Aug 01, 2010 at 08:59:19 (UTC)
Goto Top
@Friemler
Sieht gut aus face-smile

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  
Grüße
bastla

P.S.: "endlocal" wird am Ende des Batches automatisch ausgeführt ...
Member: batch0r
batch0r Aug 01, 2010 at 09:38:24 (UTC)
Goto Top
Vielen Dank für den Code und die ausführliche Beschreibung!
Member: Friemler
Friemler Aug 01, 2010 at 12:00:36 (UTC)
Goto Top
Hallo bastla,

Zitat von @bastla:
Sieht gut aus face-smile

Danke! face-smile

> "%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