batch-file - 使用带转义序列的 CALL ^

标签 batch-file

我必须通过 CALL 语句执行批处理文件并向其传递一个参数。一切正常,直到我需要使用 ^ 符号。

我运行的是 XP,可以通过两个简单的命令重现该问题:

没有CALL

c:\>echo password: "secret(<^>)secret"
password: "secret(<^>)secret"

通过调用

c:\>call echo password: "secret(<^>)secret"
password: "secret(<^^>)secret"

如何避免在使用 CALL 时不重复 ^ 符号?

最佳答案

通过这种方式,您无法避免它,因为 CALL 始终会在第二次重新解析该行之前将所有插入符号加倍。

如果您确实需要使用CALL,您应该将数据放入变量中,并在 CALL-caret-doubling 之后展开该变量

set "myVar=secret(<^>)secret"
set myVar
call echo Password "%%myVar%%"

但即使如此,如果您的 secret 包含引号,或者您尝试使用不带引号的变量,您也会遇到问题。

因此这里最好使用延迟扩展。
这也适用于括号内(无需 CALL)。

setlocal EnableDelayedExpansion
(
    set "myVar=secret(<^>)secret"
    echo !myVar!
)

如果您对双插入符的来源感兴趣,您可以阅读
How does CMD.EXE parse scripts

关于batch-file - 使用带转义序列的 CALL ^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9820405/

相关文章:

batch-file - 在批处理文件中使用 endlocal 设置变量,但这些变量在 setlocal/endlocal block 之外永远不可用

java - 在构建我的应用程序 jar 时包括外部 jar

string - BATCH CMD - 读取具有特殊字符的 INI 文件

windows - 使用 Windows 批处理从文本文件中选择一列

file - 批处理 : Remove a string from a string

powershell - 如何运行带有BAT文件中极长参数的程序?

file - 如何比使用命令 COPY 并指定所有文件名更有效地将文件 1 到 X 连接到新文件?

if-statement - 如果程序文件(x86)批量不存在,如何将路径=设置为程序文件?

windows - 通过cmd文件在csv文件末尾追加时间

windows - 如何从 .bat 循环运行 *.exe/key