Überprüfen eines FTP-Verzeichnisses ob Ordner vorhanden ist
Hallo mal wieder,
ich möchte gerne mit hilfe einer batch überprüfen, ob auf einem FTP Server ein bestimmtes Verzeichnis vorhanden ist.
So Sachen wie "if exist", etc kann ich ja bei ftp Protokoll nicht verwenden, oder?
Beste Grüße,
hansbaer
ich möchte gerne mit hilfe einer batch überprüfen, ob auf einem FTP Server ein bestimmtes Verzeichnis vorhanden ist.
So Sachen wie "if exist", etc kann ich ja bei ftp Protokoll nicht verwenden, oder?
Beste Grüße,
hansbaer
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235619
Url: https://administrator.de/contentid/235619
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
1 Kommentar
Hallo hansbaer,
mit Batch müsstest du die Ausgabe von ftp mit findstr auf den Return-Code vom cd-Befehl hin durchsuchen. Das könnte so aussehen:
Alternativ ein Script mit AutoIT als Konsolenanwendung kompiliert und du hast auch eine Lösung (Server und Zugangsdaten ab Zeile 6 eintragen)
Genutzt wird das kompilierte Programm dann so
Als Parameter gibt man den Pfad zum Ordner an welchen du auf Vorhandensein überprüfen willst (ohne abschließenden Slash).
Es gibt dann als Exit-Code eine 0 aus wenn es den Ordner gefunden hat und eine 1 wenn nicht, bei einem anderen Fehler eine 2.
Noch eine Möglichkeit ist es die Library von WINSCP zu nutzen (die unterstützt auch SFTP/FTPS SSH Verbindungen), und das z.B. so mit Powershell prüfen ob ein Ordner existiert:
Hierzu benötigt man das .NET-Assembly(.dll) und die EXE von WinSCP die man hier herunterladen kann: http://winscp.net/eng/download.php
Diese sollten dann zusammen im selben Verzeichnis liegen.
Grüße Uwe
mit Batch müsstest du die Ausgabe von ftp mit findstr auf den Return-Code vom cd-Befehl hin durchsuchen. Das könnte so aussehen:
@echo off
set FTPSERVER=ftp.deinserver.de
set FTPUSER=USERNAME
set FTPPASS=PASSWORD
set ORDNER=/pfad/abc/deinordner
set "commandfile=%temp%\remotecommands.txt"
echo open %FTPSERVER%>"%commandfile%"
echo %FTPUSER%>>"%commandfile%"
echo %FTPPASS%>>"%commandfile%"
echo cd %ORDNER%>>"%commandfile%"
echo quit>>"%commandfile%"
ftp -i -s:"%commandfile%" | findstr /b "550" >nul && goto EXISTIERTNICHT || goto EXISTIERT
:EXISTIERTNICHT
echo Ordner existiert nicht
goto weiter
:EXISTIERT
echo Ordner existiert
:weiter
del /q "%commandfile%" 2>nul
Genutzt wird das kompilierte Programm dann so
check_ftp.exe "/pfad/zum/Ordner"
Es gibt dann als Exit-Code eine 0 aus wenn es den Ordner gefunden hat und eine 1 wenn nicht, bei einem anderen Fehler eine 2.
AutoIt-Console-Script zum testen ob ein FTP-Ordner existiert
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <FTPEx.au3>
Const $FTPSERVER = "ftp.domain.de"
Const $USERNAME = "USERNAME"
Const $PASSWORD = "PASSWORD"
global $ftppath,$folder,$found
if $cmdline = 1 then
$arr = StringRegExp($cmdline[1],"^(.*)/(.*)$",3)
if UBound($arr) < 1 then
ConsoleWriteError("Fehler - Der FTP-Pfad sollte immer mit eine Slash '/' beginnen")
Exit 2
EndIf
$ftppath = $arr
$folder = $arr[1]
Else
ConsoleWriteError("Fehler - Fehlender FTP-Pfad als erster Parameter!")
exit 2
EndIf
$open = _FTP_Open("FTP-Connection")
if $open = 0 then
ConsoleWriteError("Fehler - Keine Internetverbindung.")
exit 2
endif
$conn = _FTP_Connect($open,$FTPSERVER,$USERNAME,$PASSWORD)
if $conn = 0 then
ConsoleWriteError("Fehler - Konnte die FTP-Verbindung nicht aufbauen")
_FTP_Close($conn)
exit 2
EndIf
if $ftppath <> "" then
$ret = _FTP_DirSetCurrent($conn,$ftppath)
if $ret = 0 then
ConsoleWriteError("Fehler - Konnte nicht in das angegebene Verzeichnis wechseln ")
_FTP_Close($conn)
exit 2
EndIf
endif
$dirArray = _FTP_ListToArray($conn,1)
_FTP_Close($conn)
if $dirArray > 0 then
for $i = 1 to $dirArray
if $dirArray[$i] = $folder then
$found = true
exitloop
endif
Next
EndIf
if $found then
ConsoleWrite("GEFUNDEN: '" & $cmdline[1])
exit 0
Else
ConsoleWrite("NICHT GEFUNDEN: '" & $cmdline[1])
exit 1
Endif
Noch eine Möglichkeit ist es die Library von WINSCP zu nutzen (die unterstützt auch SFTP/FTPS SSH Verbindungen), und das z.B. so mit Powershell prüfen ob ein Ordner existiert:
Mit Powershell und der WinSCP .NET-Library überprüfen ob ein FTP-Ordner existiert
[Reflection.Assembly]::LoadFrom("C:\WinSCPnet.dll")
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Ftp
$sessionOptions.HostName = "ftp.domain.de"
$sessionOptions.UserName = "USERNAME"
$sessionOptions.Password = "PASSWORD"
$session = New-Object WinSCP.Session
try{
$session.Open($sessionOptions)
$exists = $session.FileExists("/Pfad/testOrdner")
if ($exists){
write-host "Ordner existiert"
}else{
write-host "Ordner konnte nicht gefunden werden"
}
}
finally{
$session.Dispose()
}
Diese sollten dann zusammen im selben Verzeichnis liegen.
Grüße Uwe