我在这里简化了我的问题:
@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 提供了将命令批量处理成脚本的功能。以及主要电源外壳参考,一般来说,有一个很好的脚本资源这里,以有用的方式涵盖此类细节。