UpQ*_*ark 0 windows passwords cmd batch-file
我有一个批处理脚本,它为Windows服务提供了启动该服务所需的用户名和密码.但是,我遇到了一些问题,试图提供一个密码,该密码具有Windows批处理中的运算符.
我使用的密码有特殊字符,无法轻易更改以删除它们.在这种情况下,使用的特殊字符/批处理运算符是?和>.我们说密码是my>passwor?d.密码存储在单独的批处理文件中,该文件将其"my>passwor?d"与引号一起存储,以防止将运算符解释为此类.
密码提供给外部服务:
%MY_DIRECTORY%\MyService.exe -service %MY_USER% %MY_PWD%
这是我遇到麻烦的地方.%MY_PWD%默认情况下,包含引号作为字符串的一部分.因此,当我按原样"my>passwor?d"提供时,提供给服务,这是不正确的,导致它失败.
当我删除引号以便我拥有my>passwor?d正确的密码时,运行>和?运算符,并在执行批处理脚本时导致中断错误.
最后,当我躲避运营商,从而my>passwor?d成为my^>passwor\?d该脚本没有失败,但是提供给服务的密码包括转义字符,这是一错再错,导致服务失败.
是否有任何解决方案可以提供包含特殊字符的密码(或实际上是任何变量),而不包含转义字符或引号?
编辑:由于以下答案,我设法解决这个问题,我想要注意一点点补充.由于在外部共享文件中分配了变量,我无法更改
set MY_PWD="my>passwor?d" 至 set "MY_PWD=my>passwor?d"
所以我不得不处理擦洗引号.我的代码最终看起来像:
setlocal enabledelayedexpansion
set MY_PWD=!MY_PWD:"=!
@echo Passing Credentials
/MyService.exe -service %MY_USER% !MY_PWD!
endlocal
Run Code Online (Sandbox Code Playgroud)
对于"通用"解决方案,您可以尝试
set "MY_PWD=my>passwor?d"
for /f "delims= eol=" %%a in ("%MY_PWD%") do (
%MY_DIRECTORY%\MyService.exe -service %MY_USER% %%~a
)
Run Code Online (Sandbox Code Playgroud)
要么
set "MY_PWD=my>passwor?d"
setlocal enabledelayedexpansion
%MY_DIRECTORY%\MyService.exe -service %MY_USER% !MY_PWD!
endlocal
Run Code Online (Sandbox Code Playgroud)