[英]How can I make a batch script supply a password with special characters to an external application?
我有一個批處理腳本,可為Windows服務提供啟動該服務所需的用戶名和密碼。 但是,在嘗試提供具有特殊字符(在Windows Batch中為運算符)的密碼時,我遇到了一些問題。
我使用的密碼具有特殊字符,無法輕易更改以刪除它們。 在這種情況下,使用的特殊字符/批處理運算符是?
和>
。 假設密碼是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
對於“一般”解決方案,您可以嘗試
set "MY_PWD=my>passwor?d"
for /f "delims= eol=" %%a in ("%MY_PWD%") do (
%MY_DIRECTORY%\MyService.exe -service %MY_USER% %%~a
)
要么
set "MY_PWD=my>passwor?d"
setlocal enabledelayedexpansion
%MY_DIRECTORY%\MyService.exe -service %MY_USER% !MY_PWD!
endlocal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.