在Windows批处理中运行Plink – 问题

我正在使用windows批处理操作放置一个非常基本的自动化脚本,其中将通过IP地址列表进行循环,并运行plink命令login并使服务器上的帐户保持活动状态,因为它最近已login到服务器。

我相信我有大部分的function工作,但是我正在通过密码的问题。 我看到一个问题,如果我有密码有特殊字符,并通过命令提示符运行脚本它不通过特殊字符到plink命令。 这是一个脚本的外观:

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

ipaddress.txt文件包含:

 10.0.0.1 10.0.0.2 10.0.0.3 

这个想法是通过每个IP地址列表,login和validation访问。 我也希望确保传递的值是Y或N,以确保服务器是可信的或不是脚本的一部分。 任何帮助将不胜感激。

你可以在@echo on看到你的脚本行为(从cmd窗口中运行而不是双击)。 你是对的, 一些特殊字符需要逃脱 。 如果你的密码字面上应该是Welcome1%然后使用

 SET passwd=Welcome1%% 

或高级set命令语法

 SET "passwd=Welcome1%%" 

编辑 。 上面的建议特别包括%字符串中的百分比符号。 然而,将具有特殊含义的字符(例如, 重定向器 <>| ,等)转义为^<^>^|^&似乎有点不方便,不能满足。 因此需要使用高级set命令语法 延迟扩展 。

例如,可以使用Wel<come>1%字符串,如下所示:

 SET "userid=root" SET "passwd=Wel<come>1%%" for /f "delims=" %%i in ('type "ipaddress.txt" ') do ( pushd "C:\Program Files (x86)\PuTTY" SETLOCAL EnableDelayedExpansion plink.exe -pw !passwd! %userid%@%%i hostname ENDLOCAL popd )