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

Plink通过Windows批处理文件处理特定错误,windows,batch-file,command-line,plink,Windows,Batch File,Command Line,Plink,我试图解释如何在我的Windows批处理脚本中捕获来自Plink命令的返回代码的一些错误处理,例如来自服务器的“拒绝访问”,这意味着我无法访问它,因此意味着我需要访问它 代码如下: @echo on SET userid=root SET passwd=Welcome1%% for /f "delims=" %%i in ('type "ipaddress.txt" ') do ( pushd "C:\Program Files (x86)\PuTTY" echo(=============

我试图解释如何在我的Windows批处理脚本中捕获来自Plink命令的返回代码的一些错误处理,例如来自服务器的“拒绝访问”,这意味着我无法访问它,因此意味着我需要访问它

代码如下:

@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
)

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

但是,您可以使用在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
)

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

但是,您可以使用在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
)

我尝试了您建议的代码片段,并更新了上面使用的代码,但发现了一些错误。FINDSTR:无法打开日志记录。txtI根据您所说的返回代码添加了另一段代码片段。我认为使用返回码也就足够了。您很可能没有对
C:\ProgramFiles(x86)\PuTTY
的写入权限。因此输出没有被写入。您必须为输出日志文件使用不同的路径。是否有方法从脚本运行的直接位置获取文件源?我的批处理脚本是从我自己的个人“我的文档”目录运行的,而不是安装Putty的目录。如果不指定路径,文件将从/写入当前工作目录。什么是“我的文档”文件夹。或者我不理解你的评论。如果要显式引用批处理文件的文件夹,即使当前工作目录不同,请参见。我尝试了您建议的代码段,并更新了上面使用的代码,但发现了一些错误。FINDSTR:无法打开日志记录。txtI根据您所说的返回代码添加了另一段代码片段。我认为使用返回码也就足够了。您很可能没有对
C:\ProgramFiles(x86)\PuTTY
的写入权限。因此输出没有被写入。您必须为输出日志文件使用不同的路径。是否有方法从脚本运行的直接位置获取文件源?我的批处理脚本是从我自己的个人“我的文档”目录运行的,而不是安装Putty的目录。如果不指定路径,文件将从/写入当前工作目录。什么是“我的文档”文件夹。或者我不理解你的评论。如果要显式引用批处理文件的文件夹,即使当前工作目录不同,请参阅。