gpt4 book ai didi

batch-file - Windows Batch - 保护变量中的特殊字符

转载 作者:行者123 更新时间:2023-12-01 23:04:27 24 4
gpt4 key购买 nike

命令需要使用如下所示的序列:Z;[%&.:mn=WO以下调用有效:

D:\Some_folder> some_command -s "Z;[%&.:mn=WO"

目的是将此调用嵌入到批处理文件中,其行为不同于交互模式。

如您所见,有几个特殊字符,因此在使用前必须对其进行保护。批处理文件如下例所示:

set SEQUENCE=<sequence>
call %SOMEREP%\command -s %SEQUENCE% REM blah blah blah

使用set SEQUENCE="Z;[%&.:mn=WO"会失败,令人惊讶的是,echo on,执行前显示的交互模式下的完全相同,可以正常工作。实际上,命令行会提示该序列只能包含 33-256 范围内的 ASCII 字符,并且长度恰好为 12 个字符。引号就这样成为了值(value)的一部分。

保护每个字符的尝试都会失败,无论带或不带引号:

  • 使用set SEQUENCE=Z^;[^^%%^&.:mn^=WO,该行将是:

    D:\Some_folder> some_command -s Z;[%  & .:mn=WO

    它会产生错误“系统找不到驱动器”(听起来像 .: 被解释为驱动器切换)

  • 使用set SEQUENCE="Z^;[^^%%^&.:mn^=WO",该行将是:

    D:\Some_folder> some_command -s "Z^;[^^%^&.:mn^=WO"

    它提示序列大小以及第一次尝试

尝试了其他字符转义,但没有成功,例如在带引号的字符串内转义引号 ("")。这里遗漏了什么要点?在 Bash 中重写之前询问。


更新:今天早上我注意到复制的尝试显示了双插入符 (^^)。我不记得为什么这样做。我让它就位。

最佳答案

批处理文件中,cmd将消耗第一个%,因此只需加倍即可:

set "SEQUENCE=Z;[%%&.:mn=WO"
some_command -s "%SEQUENCE%"

或者如果您想保留双引号作为值的一部分,但这不是首选:

set SEQUENCE="Z;[%%&.:mn=WO"
some_command -s %SEQUENCE%

如果需要在不带双引号的情况下直接从命令中使用它,则需要在 % 上加倍并转义 & 否则将看到&符号作为链接运算符:

some_command -s Z;[%%^&.:mn=WO

可以在 Robvanderwoude 上找到所有转义序列的表格形式的良好来源。

编辑

要显式调用它,只需再次双击变量%:

set SEQUENCE="Z;[%%&.:mn=WO"
call some_command -s "%%SEQUENCE%%"

关于batch-file - Windows Batch - 保护变量中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com