我正在使用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 )