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

mat*_*ots 31 quotes cmd batch-file

我最近在Windows cmd中运行了一个带有单引号的命令,发现它的行为与我的预期不符.

从尝试google"windows批量单引号vs双引号"我发现了一些文章,其中人们询问有什么窗口处理单引号如双引号,以及bash如何处理单引号和双引号不同.但是,我无法轻易找到Windows批处理命令中单引号的明确解释.

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

dbe*_*ham 38

cmd.exe命令处理器根本不使用单引号,除非将命令括起来在FOR/F语句中运行:

for /f %%A in ('someCommand') do ...
Run Code Online (Sandbox Code Playgroud)

或者,如果使用USEBACKQ选项,则指定要由FOR/F处理的字符串:

for /f "usebackq" %%A in ('some string') do ...
Run Code Online (Sandbox Code Playgroud)

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

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

以下是有关"在cmd.exe中使用双引号的一些重要说明.

  • 双引号是一个简单的状态机.第一个"引用,接下来将其关闭.

  • 所有特殊字符都被视为文字值引用时,除了%<newLine>总是字符,!如果启用延迟扩展字符,^字符,如果启用延迟扩展和!也出现在某处线之内.

  • 如果引用已关闭,那么您可以转义"^"阻止它引用引号.但一旦引用,你就无法逃避收盘".下一个"将总是报价.