背景
我正在嘗試創建一個批處理檔案,該檔案可以使用 azcopy 將檔案復制到 Azure 存盤資源管理器。我只想將我的 SAS 密鑰復制并粘貼到我的批處理檔案中,而不必每次都查找并轉義所有特殊字符(&、= 等)。
我的問題
如何輕松地在批處理檔案中使用這些字符定義一個復雜的字串,以便它們不會被解釋并且我不必手動將它們轉義出來?這甚至可能嗎?例如,是否有一些關鍵字或什么我可以添加到一個基本告訴它的 set 陳述句中,“嘿,這個變數的值中的所有字符都應該按原樣使用而不做任何解釋”?
我看過的一些資源
- https://ss64.com/nt/set.html
- https://ss64.com/nt/syntax-esc.html
- 在Windows批處理檔案中回顯確切的字串?
- https://www.tutorialspoint.com/batch_script/batch_script_variables.htm
- 如何批量設定變數?
在某些語言中,您將變數值放在雙引號中以使其成為文字。我不確定如何在批處理檔案中執行此操作。
一個例子
假設我有這個偽鍵:
nifty-11-stuff:28GOOBER:5&se=2022
假設我想在變數中完全保留和使用這個字串,這樣如果我以后在批處理命令中使用它,它就不會改變。
我試過這段代碼(帶引號):
@echo off
setlocal EnableDelayedExpansion
set SAS="nifty-11-stuff:28GOOBER:5&se=2022"
echo %SAS%
pause
我在 VSCode 中的終端輸出給出了這個:
PS D:\git\documentationutilities> cmd /c "d:\git\documentationutilities\test.bat"
"nifty-11-stuffA28GOOBERA5&se=2022"
請注意,:實體正在被解釋并因此從最終值中洗掉。
提前感謝您提供的任何幫助。
uj5u.com熱心網友回復:
百分號甚至沒有進入字串(用 驗證set var),所以我使用了一個包含您確切字串的文本檔案。延遲擴展避免了要決議的字串:
@echo off
setlocal EnableDelayedExpansion
<test.txt set /p "var="
set var
echo var=!var!
uj5u.com熱心網友回復:
前段時間我建立了一個magicEcho宏
小貼士:MagicEcho
%magicEcho% ^%!%<> "^!%path%<>" ^
你出現在螢屏上
^%!%<> ^ "^!%path%<>"
但是對于正常使用,宏有點過分了。
但是也許您應該查看批處理的heredoc帖子,例如
Windows批處理的heredoc?
或
dbenham 的解決方案 heredoc for Windows 批處理?
uj5u.com熱心網友回復:
FOR /f "delims=" %%b IN (%filename%) DO ECHO %%b
如果代碼可以在檔案中。
如果您需要參考它,那么echo "%%b"
如果檔案名包含空格,請使用"usebackqdelims="和"%filename%"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/494644.html
