Plink通过Windows批处理文件处理特定错误

时间:2015-11-12 06:50:44

标签: windows batch-file command-line plink

我试图破译我将如何尝试在我的Windows批处理脚本中捕获一些错误处理,以获取来自我的Plink命令的返回代码,例如" Access Denied"来自服务器,这意味着我无法访问它,这意味着我需要访问它。

以下是代码:

@echo on

SET userid=root
SET passwd=Welcome1%%

for /f "delims=" %%i in ('type "ipaddress.txt" ') do (
pushd "C:\Program Files (x86)\PuTTY"
echo(========================================
plink.exe -pw %passwd% %userid%@%%i hostname
echo(========================================
popd
)

更新代码:

@echo on

SET "userid=root"
SET "passwd=Welcome1%%"

for /f "delims=" %%i in ('type "ipaddress.txt" ') do (
pushd "C:\Program Files (x86)\PuTTY"

plink.exe -pw %passwd% %userid%@%%i hostname 2> logging.txt

type "logging.txt"

findstr /C:"Access denied" "logging.txt"

if errorlevel 1 (
   echo Connected
) else (
   echo Rejected
)
popd
)

我希望打印出成功登录的访问权限,并且第一个for循环可以很好地实现这一目标。我想要确保的是捕获拒绝访问,而不是打印它失败的主机IP,但是在继续它通过IP地址列表处理之后。

基于以下详细信息,我甚至尝试了这样的代码设置,以便根据简单的退出o或1代码保持简单:

@echo on

SET "userid=root"
SET "passwd=Welcome1%%"

for /f "delims=" %%i in ('type "ipaddress.txt" ') do (
pushd "C:\Program Files (x86)\PuTTY"

echo(==================
plink.exe -pw %passwd% %userid%@%%i hostname

if ERRORLELVEL 1 (
   echo %%i - Rejected
   echo(==================
) else (
   echo %%i - Connected
   echo(==================
)
popd
)

1 个答案:

答案 0 :(得分:0)

Plink返回退出代码0表示成功,或返回1表示失败。因此,您无法使用退出代码来检查特定的错误类型。

但是,您可以使用findstr command在Plink的错误输出中搜索特定的错误消息。

plink.exe -pw %passwd% %userid%@%%i hostname 2> errors.txt

type errors.txt

findstr /C:"Access denied" errors.txt

if errorlevel 1 (
    echo Success or different error
) else (
    echo Access denied
)