我正在使用Windows批处理脚本自动运行ftp脚本。我想运行的ftp命令集保存在文件中。
示例:
@echo off
ftp -n -i -s:c:\temp\myftpscriptfile.ftp
我已使用%ERRORLEVEL%语法成功捕获批处理命令中的错误条件。我的挑战是ftp脚本命令总是返回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 :(得分:1)
使用find
:
ftp -n -i -s:c:\temp\myftpscriptfile.ftp 2>&1|find "Unknown host">nul
if %errorlevel%==0 (
echo Error!
)
答案 1 :(得分:1)
使用ftp
命令解析for /F
通信。下一个脚本中的可能方法。警告:据说在给定的测试序列中不存在一些ftp
错误消息。当然,您可以测试正面 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