延迟扩展在整个批处理脚本中不起作用



我正在开发一个脚本,该脚本将使用 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

最新更新