簡體   English   中英

如何使批處理腳本向外部應用程序提供帶有特殊字符的密碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM