【发布时间】:2014-12-05 21:13:18
【问题描述】:
短: 我正在尝试制作一个设置和使用变量的 1 行命令脚本。现在我想出了:
cmd /C "set var=127.0.0.1 & echo %var%"
我希望它输出 127.0.0.1,但它会打印 %var%。
长: 我正在使用 keepass 作为密码管理器,并试图让它自动为我启动一个 RDP 会话。我在 URL 中输入了以下内容:
cmd://cmd /C "cmdkey /generic:TERMSRV/127.0.0.1 /user:{USERNAME} /pass:{PASSWORD} & mstsc.exe /v:127.0.0.1 & cmdkey /delete:TERMSRV/127.0.0.1"
这行得通,但如果我需要更新 ipaddress,我必须触摸 3 个位置而不是 1 个。我尝试将其更改为以下,但它不起作用:
cmd://cmd /C "set sServer=127.0.0.1 & cmdkey /generic:TERMSRV/%sServer% /user:{USERNAME} /pass:{PASSWORD} & mstsc.exe /v:%sServer% & cmdkey /delete:TERMSRV/%sServer%"
【问题讨论】:
-
无法理解为什么 1 行命令脚本 条件,但
SETLOCAL EnableDelayedExpansion和echo !var!应该会有所帮助。了解更多信息EnableDelayedExpansion -
一行需求来自keepass。它的 cmd:// 能力只允许你运行 1 个命令。我用 DelayedExpansion 尝试了几个变体,但还没有找到正确的组合。有人在一天前发布了一个答案,但现在它已经消失了......
-
另一种方法:
cmd://cmd /C "for /F "tokens=*" %G in ("127.0.0.1") do cmdkey /generic:TERMSRV/%G /user:{USERNAME} /pass:{PASSWORD} & mstsc.exe /v:%G & cmdkey /delete:TERMSRV/%G"。因为我对keepass一无所知,而不是%G可能是%%Gas in a batch script 应该是。