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

时间:2017-08-22 21:52:34

标签: batch-file

我正在开发一个脚本,只需执行批处理文件就可以使用Putty命令行登录多个系统。批处理从文本文件中读取我希望从中启动的服务器名称列表。

使用以“set / p”输入的密码时会出现问题。密码中包含特殊字符,例如&符号。要使用该变量,我尝试使用DELAYEDEXPANSION。

我可以用密码使用!pass来回显变量!但是,当在调用putty的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:\DEV\Utilities\putty\putty -ssh %username%@%%z -pw !pass! -m "C:\DEV\Utilities\putty\commands" -t
timeout /t 01 /nobreak > NUL
) 
pause

如果我使用百分号如%pass%的变量,则密码不正确。例如,“c& ndyCone”最终为“c& ndyCone”(少于引号)。有任何建议将正确的密码传递给Putty吗?

1 个答案:

答案 0 :(得分:1)

这里的问题不是延迟扩展,而是双引号或转义字符& 所以它被解释为命令连接,从而将你的一个命令行分成两个 - 第二个以密码的其余部分开头,这几乎不是一个有效的命令: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:\DEV\Utilities\putty\putty -ssh %username%@%%z -pw "%pass%" -m "C:\DEV\Utilities\putty\commands" -t
timeout /t 01 /nobreak > NUL
) 
pause