我正在开发一个脚本,只需执行批处理文件就可以使用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吗?
答案 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