【问题标题】:Running Plink in a Windows Batch - Issues在 Windows 批处理中运行 Plink - 问题
【发布时间】:2015-11-11 05:55:56
【问题描述】:

我正在使用 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 以确保服务器受信任或不作为脚本的一部分。任何帮助将不胜感激。

【问题讨论】:

  • 那个“特殊字符”是什么?
  • 百分号必须加倍。 set "passwd=Welcome*%%"

标签: windows batch-file command-prompt putty plink


【解决方案1】:

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

SET passwd=Welcome1%%

或高级set 命令语法

SET "passwd=Welcome1%%"

编辑。以上建议特别涵盖了字符串中的% 百分比符号。但是,将一些具有特殊含义的字符(例如redirectors<>|& 等)转义为^<^>^| , ^& 似乎有点不方便,不够用。因此需要高级的set 命令语法 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
)

【讨论】:

  • 谢谢您按预期工作。我假设给出的细节是关于延迟扩展的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多