单引号在Windows批处理文件中有什么作用?

43

我最近在Windows命令提示符中运行了一个包含单引号的命令,发现它的表现不如我所预期。

通过尝试谷歌搜索“windows批处理单引号与双引号”,我发现一些人询问Windows如何将单引号视为双引号,以及bash如何以不同方式处理单引号和双引号。然而,我并没有轻松地找到有关单引号在Windows批处理命令中的显式解释。

那么,在Windows批处理文件中,单引号是做什么用的?它们是否执行任何引用功能?


2
类型:cmd /? 在那里有关于双引号使用的充分描述。请注意,撇号(或“单引号”)在批处理文件中没有特殊用途(除了在 for /F 命令中)。 - Aacini
1个回答

56

cmd.exe 命令处理器根本不使用单引号,除非用于在 FOR /F 语句中包含要运行的命令:

for /f %%A in ('someCommand') do ...

如果使用 USEBACKQ 选项,可以通过 FOR /F 指定要处理的字符串:

for /f "usebackq" %%A in ('some string') do ...

cmd.exe处理的所有其他引用都是使用双引号完成的。但是,有些Windows实用程序(外部命令)如WMIC会为了自己的引用目的而使用单引号。但是并没有标准 - 每个实用程序都可以自由地对单引号进行解释。

cmd.exe与各种命令行实用程序使用的不一致的转义和引用规则常常使得发现任何给定情况所需的正确语法成为一项挑战。

以下是使用cmd.exe的双引号"时的一些重要注意事项。

  • 双引号是一个简单的状态机。第一个"打开引用,下一个关闭引用。

  • 当被引用时,所有特殊字符都被视为文字值,除了始终是%<newLine>字符以及如果启用延迟扩展,则为!字符,以及如果!也出现在该行中,则在启用延迟扩展和^字符内。

  • 如果没有引用,则可以将"作为^"进行转义,以防止其打开引用。但是一旦引用打开,就不能转义关闭"。下一个"将始终关闭引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接