Eine Batch anpassen... FTP
Hallo Zusammen,
Bastla hat mich auf diese Batch aufmersam gemacht:
@echo off & setlocal
::Daten für die FTP-Verbindung
set "FTPServer=Server"
set "FTPUser=Username"
set "FTPPassword=Passwort"
set "FTPDir=/"
set "FTPFileType=zip"
::Pfade von temporären Dateien
set "GetFTPDirListing=%TEMP%\GetFTPDirListing.txt"
set "FTPDirListing=%TEMP%\FTPDirListing.txt"
set "FTPDirListing2=%TEMP%\FTPDirListing2.txt"
::Die temporäre Datei leeren, die das Verzeichnislisting aufnimmt
type NUL > "%FTPDirListing%"
::FTP-Script in temporäre Datei schreiben
::FTP-Script ausführen
::Das Verzeichnislisting wird dabei lokal in eine temporäre Datei geschrieben
ftp /inv /s:"%GetFTPDirListing%" > NUL
::Aus dem Verzeichnislisting die Zeilen herausfiltern, die Dateien des gewünschten Typs enthalten
::Die Angaben zum Datum und den Dateinamen an das Unterprogramm ProcessFile übergeben
::Dessen Ausgaben werden in eine temporäre Datei umgeleitet
(for /f "tokens=6-8*" %%a in ('findstr /i /r /c:"^-.*\.%FTPFileType%$" "%FTPDirListing%" 2^>NUL') do (
call :ProcessFile %%c %%a %%b "%%d"
)) > "%FTPDirListing2%"
::Die im letzten Schritt erzeugte Datei mit SORT in absteigender Reihenfolge sortieren
::Dadurch steht die jüngste Datei in der ersten Zeile. Diese Zeile auslesen und dann Abbruch
for /f "tokens=3*" %%a in ('sort /r "%FTPDirListing2%" 2^>NUL') do (
set "NewestFile=%%b"
goto :ReadResultLoopBreak
)
:ReadResultLoopBreak
::Ergebnis ausgeben
echo.%NewestFile%
::Temporäre Dateien löschen
del "%FTPDirListing%"
del "%FTPDirListing2%"
del "%GetFTPDirListing%"
::Script Ende
exit /b 0
::Unterprogramm
::Erzeugung der 2-stelligen numerischen Darstellung eines Monatsnamens
:ProcessFile
set "MonthNames=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
set "MonthA=%2"
set /a MonthN=0
::Monatsnummer aus dem Namen ermitteln
for %%m in (%MonthNames%) do (
set /a MonthN+=1
if /i "%%m" equ "%MonthA%" goto :MapLoopBreak
)
:MapLoopBreak
::Aus der Monatsnummer die 2-stellige Darstellung erzeugen
set "MonthN=0%MonthN%"
set "MonthN=%MonthN:~-2%"
::Datum und Dateiname ausgeben
::Anschließend ein Zeilenumbruch
<NUL set /p "=%1 %MonthN% %3 %~4"
echo.
::Back to caller
exit /b 0
So weit so gut, muss aber ehrlich zugeben! Das ich das Ganze Konstrukt nicht ganz verstehe! Was ich verstehe ist:
Verbindung wird aufgebaut und eine Liste wird erzeugt und als tmp Datei gespeichert oder so dann kann man wohl die Sortierung Ändern und was mit Datum Monaten usw. aber so richt schlau werde ich nicht daraus. Meine Anforderung ist:
Starte eine FTP Verbindung über Windows FTP log dich ein und prüfen ob die Datei-xyz vorhanden ist und das aktuelle Datum von heute trägt!
Wenn Ja schreibe in die LOG: Name des FTP-ServerAdresse Datum und Uhrzeit und das Wort OK vorhanden!
Wenn FTP-Server nicht erreichbar ist oder die Datei nicht das heutige Datum trägt, schreibe in die LOG auch Datum und Uhrzeit und das Wort Fehler!
Kann mir jemand das Ding anpassen? Alleine bekomme ich das nicht hin, vielen Dank!
Bastla hat mich auf diese Batch aufmersam gemacht:
@echo off & setlocal
::Daten für die FTP-Verbindung
set "FTPServer=Server"
set "FTPUser=Username"
set "FTPPassword=Passwort"
set "FTPDir=/"
set "FTPFileType=zip"
::Pfade von temporären Dateien
set "GetFTPDirListing=%TEMP%\GetFTPDirListing.txt"
set "FTPDirListing=%TEMP%\FTPDirListing.txt"
set "FTPDirListing2=%TEMP%\FTPDirListing2.txt"
::Die temporäre Datei leeren, die das Verzeichnislisting aufnimmt
type NUL > "%FTPDirListing%"
::FTP-Script in temporäre Datei schreiben
"%GetFTPDirListing%" echo open %FTPServer%
"%GetFTPDirListing%" echo user %FTPUser% %FTPPassword%
"%GetFTPDirListing%" echo ascii
"%GetFTPDirListing%" echo cd "%FTPDir%"
"%GetFTPDirListing%" echo ls -l "%FTPDirListing%"
"%GetFTPDirListing%" echo bye
"%GetFTPDirListing%" echo ascii
"%GetFTPDirListing%" echo cd "%FTPDir%"
"%GetFTPDirListing%" echo ls -l "%FTPDirListing%"
"%GetFTPDirListing%" echo bye
::FTP-Script ausführen
::Das Verzeichnislisting wird dabei lokal in eine temporäre Datei geschrieben
ftp /inv /s:"%GetFTPDirListing%" > NUL
::Aus dem Verzeichnislisting die Zeilen herausfiltern, die Dateien des gewünschten Typs enthalten
::Die Angaben zum Datum und den Dateinamen an das Unterprogramm ProcessFile übergeben
::Dessen Ausgaben werden in eine temporäre Datei umgeleitet
(for /f "tokens=6-8*" %%a in ('findstr /i /r /c:"^-.*\.%FTPFileType%$" "%FTPDirListing%" 2^>NUL') do (
call :ProcessFile %%c %%a %%b "%%d"
)) > "%FTPDirListing2%"
::Die im letzten Schritt erzeugte Datei mit SORT in absteigender Reihenfolge sortieren
::Dadurch steht die jüngste Datei in der ersten Zeile. Diese Zeile auslesen und dann Abbruch
for /f "tokens=3*" %%a in ('sort /r "%FTPDirListing2%" 2^>NUL') do (
set "NewestFile=%%b"
goto :ReadResultLoopBreak
)
:ReadResultLoopBreak
::Ergebnis ausgeben
echo.%NewestFile%
::Temporäre Dateien löschen
del "%FTPDirListing%"
del "%FTPDirListing2%"
del "%GetFTPDirListing%"
::Script Ende
exit /b 0
::Unterprogramm
::Erzeugung der 2-stelligen numerischen Darstellung eines Monatsnamens
:ProcessFile
set "MonthNames=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
set "MonthA=%2"
set /a MonthN=0
::Monatsnummer aus dem Namen ermitteln
for %%m in (%MonthNames%) do (
set /a MonthN+=1
if /i "%%m" equ "%MonthA%" goto :MapLoopBreak
)
:MapLoopBreak
::Aus der Monatsnummer die 2-stellige Darstellung erzeugen
set "MonthN=0%MonthN%"
set "MonthN=%MonthN:~-2%"
::Datum und Dateiname ausgeben
::Anschließend ein Zeilenumbruch
<NUL set /p "=%1 %MonthN% %3 %~4"
echo.
::Back to caller
exit /b 0
So weit so gut, muss aber ehrlich zugeben! Das ich das Ganze Konstrukt nicht ganz verstehe! Was ich verstehe ist:
Verbindung wird aufgebaut und eine Liste wird erzeugt und als tmp Datei gespeichert oder so dann kann man wohl die Sortierung Ändern und was mit Datum Monaten usw. aber so richt schlau werde ich nicht daraus. Meine Anforderung ist:
Starte eine FTP Verbindung über Windows FTP log dich ein und prüfen ob die Datei-xyz vorhanden ist und das aktuelle Datum von heute trägt!
Wenn Ja schreibe in die LOG: Name des FTP-ServerAdresse Datum und Uhrzeit und das Wort OK vorhanden!
Wenn FTP-Server nicht erreichbar ist oder die Datei nicht das heutige Datum trägt, schreibe in die LOG auch Datum und Uhrzeit und das Wort Fehler!
Kann mir jemand das Ding anpassen? Alleine bekomme ich das nicht hin, vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 229535
Url: https://administrator.de/forum/eine-batch-anpassen-ftp-229535.html
Ausgedruckt am: 20.04.2025 um 11:04 Uhr
5 Kommentare
Neuester Kommentar
Verbindung wird aufgebaut und eine Liste wird erzeugt und als tmp Datei gespeichert oder so dann kann man wohl die Sortierung Ändern und was mit Datum Monaten usw.
aber so richt schlau werde ich nicht daraus. Meine Anforderung ist:
Da scheint jemand lyrische Meisterwerke zu konstruieren.aber so richt schlau werde ich nicht daraus. Meine Anforderung ist:
Hallo zeroblue2005,
Ich habe den Code überflogen und gehe davon aus, alles funktioniert, wie es soll.
Wenn ich es richtig sehe, tut diese Batch fast, was du möchtest.
Sie spuckt dir am Ende den Namen der neuesten Datei auf dem Server aus.
Könntest du vielleicht nochmal genau und in Ruhe erklären, was die Problematik ist, was Dein Ziel ist und was du nicht verstehst?
Beste Grüße
Dominique
Hi,
so heftig ist es nicht. Mit Code-Tags wäre es sicher recht übersichtlich. Wie auch immer.
Nimm dir doch mal das obige Script und schnipsel die für dich relevanten Teile heraus.
An dieser Stelle
werden alle für dich relevanten Informationen ermittelt
und in der Sprungmarke "ProcessFile" und "MapLoopBreak" verarbeitet:
Das ist den Kommentaren so zu entnehmen.
Hast du den Ablauf dieser Snippets denn verstanden?
Wir könnten nun hingehen und die ermittelten Daten mit dem heutigen Datum vergleichen.
Ist eine Datei also "von heute", so schreiben wir wie hier:
eine neue Abfolge von FTP-Befehlen die die "erkannte Datei" herunterlädt und führen diese aus.
Versuch doch mal mithilfe der Vorlage (bzw. einzelner Teile daraus) einen Entwurf zu erstellen und poste ihn.
Beste Grüße
Dominique
so heftig ist es nicht. Mit Code-Tags wäre es sicher recht übersichtlich. Wie auch immer.
Nimm dir doch mal das obige Script und schnipsel die für dich relevanten Teile heraus.
An dieser Stelle
::Aus dem Verzeichnislisting die Zeilen herausfiltern, die Dateien des gewünschten Typs enthalten
::Die Angaben zum Datum und den Dateinamen an das Unterprogramm ProcessFile übergeben
::Dessen Ausgaben werden in eine temporäre Datei umgeleitet
(for /f "tokens=6-8*" %%a in ('findstr /i /r /c:"^-.*\.%FTPFileType%$" "%FTPDirListing%" 2^>NUL') do (
call :ProcessFile %%c %%a %%b "%%d"
)) > "%FTPDirListing2%"
REM Ich hoffe, mit den Umbrüchen habe ich keine Syntax zerhackt.
und in der Sprungmarke "ProcessFile" und "MapLoopBreak" verarbeitet:
::Erzeugung der 2-stelligen numerischen Darstellung eines Monatsnamens
:ProcessFile
set "MonthNames=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
set "MonthA=%2"
set /a MonthN=0
::Monatsnummer aus dem Namen ermitteln
for %%m in (%MonthNames%) do (
set /a MonthN+=1
if /i "%%m" equ "%MonthA%" goto :MapLoopBreak
)
:MapLoopBreak
::Aus der Monatsnummer die 2-stellige Darstellung erzeugen
set "MonthN=0%MonthN%"
set "MonthN=%MonthN:~-2%"
::Datum und Dateiname ausgeben
<NUL set /p "=%1 %MonthN% %3 %~4"
Hast du den Ablauf dieser Snippets denn verstanden?
Wir könnten nun hingehen und die ermittelten Daten mit dem heutigen Datum vergleichen.
Ist eine Datei also "von heute", so schreiben wir wie hier:
::Die temporäre Datei leeren, die das Verzeichnislisting aufnimmt
type NUL > "%FTPDirListing%"
::FTP-Script in temporäre Datei schreiben
>>"%GetFTPDirListing%" echo open %FTPServer%
>>"%GetFTPDirListing%" echo user %FTPUser% %FTPPassword%
>>"%GetFTPDirListing%" echo ascii
>>"%GetFTPDirListing%" echo cd "%FTPDir%"
>>"%GetFTPDirListing%" echo ls -l "%FTPDirListing%"
>>"%GetFTPDirListing%" echo bye
Versuch doch mal mithilfe der Vorlage (bzw. einzelner Teile daraus) einen Entwurf zu erstellen und poste ihn.
Beste Grüße
Dominique