窗口批处理)转义“for”句子中的特殊字符

窗口批处理)转义“for”句子中的特殊字符

我在这里简化了我的问题:

@echo off

for %%a in (& ? !) do echo %%a

pause>nul

我希望它只打印

&
?
!

但它不是这样工作的,而是会出现错误

我知道错误是由于特殊字符引起的,但我不知道如何让它们在该句子中消失。

我试过:

for %%a in "(& ? !)" do echo %%a
for %%a in ("& ? !") do echo %%a
for %%a "in (& ? !)" do echo %%a
for %%a in ("&" "?" "!") do echo %%a

等等,但没有找到如何

答案1

正如您所注意到的,Windows 命令处理器将某些字符解释为具有特殊含义,可用于复杂命令。

您必须转义此类字符才能正常使用。

Windows 命令处理器的转义字符是^。使用它,您可以转义几乎所有特殊字符,包括 & 符号&。唯一无法转义的是问号?

@echo off

for %%a in (^& !) do echo %%a

pause

输出:

&

!

对于更高级的脚本,Windows 现在包含 PowerShell,您可以使用它来解决这个问题。输入命令

PowerShell

您将看到一个新的提示。然后,您可以从 PowerShell 提示符中使用以下命令执行所需的操作,而不受特殊字符的限制:

foreach ($item in @("&", "?", "!")) { echo $item }

输出:

&

?

!

我给出了一个单行示例,但就像经典的 Windows 命令处理器一样,PowerShell 提供了将命令批量处理成脚本的功能。以及主要电源外壳参考,一般来说,有一个很好的脚本资源这里,以有用的方式涵盖此类细节。

相关内容