运行 批量 Windows Plink - 问题

Running Plink in a Windows Batch - Issues

我正在使用 windows 批处理操作组合一个非常基本的自动化脚本,其中将循环遍历 IP 地址列表和 运行 plink 命令以登录并保持帐户活动在服务器上,因为它最近登录过服务器。

我相信我可以使用大部分功能,但是我在传递密码时遇到了问题。我看到一个问题,如果我的密码有特殊字符,并且我通过命令提示符 运行 脚本,它不会通过特殊字符传递给 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 地址的列表,登录并验证访问权限。我还希望确保传递值 Y 或 N 以确保服务器作为脚本的一部分是可信的还是不可信的。任何帮助将不胜感激。

您可以使用 @echo on(运行 从 cmd window 中查看您的脚本行为,而不是双击)。你是对的some special characters need to be escaped。如果您的密码字面上应该是 Welcome1% 那么请使用

SET passwd=Welcome1%%

或高级set命令语法

SET "passwd=Welcome1%%"

编辑。以上建议特别涵盖字符串中的 % 百分号。但是,转义一些具有 特殊含义 的字符(例如 redirectors <, >, |, & etc.) as ^<, ^>, ^|, ^& seems to be a bit inconvenient and could not suffice. Therefore required advanced set command syntax and delayed expansion enabled

例如,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
)