背景
我正在尝试创建一个可以使用 azcopy 将文件复制到 Azure 存储资源管理器的批处理文件。我只想将我的 SAS key 复制并粘贴到我的批处理文件中,而不必每次都找到并转义所有特殊字符(&、= 等)。
我的问题
如何在批处理文件中使用这些字符轻松定义复杂的字符串,这样它们就不会被解释,也不必手动将它们转义?这可能吗?例如,是否有一些关键字或其他东西我可以添加到 set 语句中,基本上告诉它,“嘿,这个变量值中的所有字符都应该按原样使用,没有任何解释”?
我看过的一些资源
- https://ss64.com/nt/set.html
- https://ss64.com/nt/syntax-esc.html
- Echo exact string in windows batch file?
- https://www.tutorialspoint.com/batch_script/batch_script_variables.htm
- How do i set variables literally in batch?
在某些语言中,您将变量值放在双引号中以使其成为文字。我不确定如何在批处理文件中执行此操作。
一个例子
假设我有这个伪 key :
nifty-11-stuff%3A28GOOBER%3A5&se=2022
假设我想完全按照变量中的原样保留和使用这个字符串,这样如果我稍后在我的批处理命令中使用它,它就不会发生变化。
我试过这段代码(带引号):
@echo off
setlocal EnableDelayedExpansion
set SAS="nifty-11-stuff%3A28GOOBER%3A5&se=2022"
echo %SAS%
pause
我在 VSCode 中的终端输出是这样的:
PS D:\git\documentationutilities> cmd /c "d:\git\documentationutilities\test.bat"
"nifty-11-stuffA28GOOBERA5&se=2022"
请注意 %3A
实例正在被解释并因此从最终值中删除。
提前感谢您提供的任何帮助。
最佳答案
百分号甚至没有进入字符串(使用set var
验证),所以我使用了一个包含您的确切字符串的文本文件。延迟展开避免字符串被解析:
@echo off
setlocal EnableDelayedExpansion
<test.txt set /p "var="
set var
echo var=!var!
关于batch-file - 有没有一种简单的方法可以在 Windows 批处理文件中定义和使用复杂的文字字符串,而无需手动转义每个特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72691819/