2015-07-15 2 views
1

Я использую оконные скрипты для запуска сценариев ftp автоматически. Где набор команд ftp, которые я хочу запустить, сохраняется в файле.Как захватить ошибки в сценариях ftp windows?

пример:

@echo off 
ftp -n -i -s:c:\temp\myftpscriptfile.ftp 

Я использовал% ERRORLEVEL% синтаксис успешно захватить условие ошибки в командах партий. Моя задача - команда ftp script всегда возвращает ERRORLEVEL 0, даже когда команды внутри скрипта терпят неудачу.

У меня возникли трудности с выяснением того, как сценарий ftp действительно возвращается или ловутся, когда в нем возникают ошибки. Он просто будет запускать команды вслепую, и хотя я могу видеть ошибки, отобранные на экране, я не могу их захватить как ERRORLEVEL.

Пример скриншота сценария, который не может войти в систему, а затем повторяет ERRORLEVEL, который показывает ноль ..

ftp> open fubar.test.com 
Unknown host fubar.test.com 
ftp> user test test 
Not connected. 
ftp> ascii 
Not connected. 
ftp> cd /home/test/dirname 
Not connected. 
ftp> mput C:\Test\test*.txt 
Not connected. 
ftp> close 
Not connected. 
ftp> quit 
.0 
+0

Вы должны лучше использовать другой командную строку FTP-клиент. –

ответ

1

Использование find:

ftp -n -i -s:c:\temp\myftpscriptfile.ftp 2>&1|find "Unknown host">nul 
if %errorlevel%==0 (
    echo Error! 
) 
1

Анализировать ftp связи с использованием for /F команды. Возможный подход в следующем скрипте. Предостережение: там, возможно, существуетсообщение об ошибке, не включенное в данную тестовую последовательность. Конечно, вы можете проверить положительныхftp сообщений скорее ...

@ECHO OFF >NUL 
SETLOCAL enableextensions enabledelayedexpansion 
set "errsftp=0" 
ftp -n -i -s:c:\temp\myftpscriptfile.ftp >c:\temp\31442020.err 2>&1 
for /F "tokens=1*" %%G in (c:\temp\31442020.err) do (
    rem echo %%G [%%H] 
    if "%%G"=="ftp>" (
    set "line=%%H" 
    set "errs=0" 
) else (
    set "reply=%%G %%H" 
    Call :testreply Unknown host 
    Call :testreply Connection timed out 
    Call :testreply Not connected 
    rem insert next tests here 
    if !errs! EQU 0 echo !line! =looks OK= !reply! 
) 
) 
echo(
echo :errors total: %errsftp% 

ENDLOCAL 
goto :eof 

:testreply 
    set "ylper=!reply:%*=!" 
    if not "!ylper!"=="!reply!" (
     echo !line! =ERROR= !reply! 
     set /A "errs+=1" 
     set /A "errsftp+=1" 
    ) 
goto :eof 
Смежные вопросы