我正在开发一个脚本,该脚本将使用 Putty 命令行仅通过执行批处理文件即可登录到多个系统。批处理读取我希望从文本文件启动的服务器名称列表,而不会出现问题。
使用在"set /p
"输入的密码时出现问题。密码中包含特殊字符,例如与号。要使用变量,我正在尝试使用DELAYEDEXPANSION
.
我可以使用密码很好地回显变量!pass!
但是,当在调用腻子的 for 循环中使用时,DELAYEDEXPANSION
似乎失败了。结果实际上是!通过!
SETLOCAL ENABLEDELAYEDEXPANSION
set /p destination="Enter the file name: "
set /p "pass=Your LAN PASSword: "
ECHO Pass=!pass!
pause
for /F %%z in (%destination%) do (
start C:DEVUtilitiesputtyputty -ssh %username%@%%z -pw !pass! -m "C:DEVUtilitiesputtycommands" -t
timeout /t 01 /nobreak > NUL
)
pause
如果我使用带有百分号的变量,例如%pass%
,密码不正确。例如,"c&ndyCone"
最终会变成"c & ndyCone"
(减去引号(。
有什么建议可以将正确的密码传递给腻子吗?
你在这里的问题不是延迟扩展,而是既不是双引号也不是转义的字符&
。
因此,它被解释为命令串联,从而将您的一个命令行分成两个 - 第二个从密码的其余部分开始,这几乎不是一个有效的命令:ndyCone
其次,start 将双引号中的第一个参数解释为窗口标题。
尝试:
::commented out SETLOCAL ENABLEDELAYEDEXPANSION
set /p destination="Enter the file name: "
set /p "pass=Your LAN PASSword: "
ECHO Pass="%pass%"
pause
for /F %%z in (%destination%) do (
start "" C:DEVUtilitiesputtyputty -ssh %username%@%%z -pw "%pass%" -m "C:DEVUtilitiesputtycommands" -t
timeout /t 01 /nobreak > NUL
)
pause