for /f skip^=4 %b in ('"echo;prompt;$E|cmd"') do set ESC=%b
CR/LF
如果我将此命令重定向到一个文件,我可以看到文件中有 4 个。
文件中的最后一个字符是HEX 0D 0A 0D 0A 1B
^
为什么等号前需要转义字符?即。skip^=4
答案1
for /F %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
- 以上是最初发布于的代码DosTips.com:
我可以访问标准集中不存在的 ascii 字符吗?
for /f skip^=4 %b in ('"echo;prompt;$E|cmd"') do set "_ESC=%b"
输出到标准输出
>for /f %a in ('"echo;prompt;$E|cmd"') do @echo\output: %a
output: Microsoft
output: (c)
output: C:\Windows\System32>prompt;$E
output:
>
>for /f skip^=4 %a in ('"echo;prompt;$E|cmd"') do @echo\output: %a
output:
>
输出到文件:
for /f skip^=4 %a in ('"echo;prompt;$E|cmd"') do @echo;%a>>File_With_Skip4.txt
for /f %a in ('"echo;prompt;$E|cmd"') do @echo;%a>>File_Without_Skip4.txt
观察1:下面的命令行将文件转换为.\Hex_File_Without_Skip4.txt
:
CertUtil -EncodeHex File_Without_Skip4.txt Hex_File_Without_Skip4.txt
观察2:此处显示“不可打印”字符的图像是使用以下方法获得的记事本++并启用所有字符的显示:
观察3:看命令重定向>
对于amd的行为,>>
与此点相关的是:
我可以看到4 回车/换行在文件中。
如果你看到 4 回车/换行即使使用skip^=4
,也请检查您的命令并确保您正在覆盖或向输出文件添加内容。
为什么需要
"skip=4"
或skip=^4
——而不仅仅是skip=4
?
当我重定向时,我只重定向了部分
( )
命令for /f
:即。C:\>echo;prompt;$E|cmd > result.txt
CMD 命令调用 shell,默认情况下返回前 4 行,然后处理重定向参数 (
echo;prompt;|
),生成/返回Esc在最后一行(第五行):
了解命令是由命令解释器处理的,并且它使用预定义的语法规则,并且在许多情况下,一个或多个字符的使用可以理解为命令补集、运算符、重定向器等。这些字符的行为与文字用法不同,文档将它们称为特殊字符,如果我们在不使用转义符的情况下使用它们,它们可能会并且会产生不同的干扰。
欲了解更多信息,请阅读上面链接的参考资料。
其他资源:
For /?
For /F /?
Prompt /?
- 命令重定向
|
,,,,<
>
>>
2>
, ETC。
- Windows 命令解释器如何
cmd.exe
解析脚本
答案2
看 操作方法:在 Windows 命令行中转义字符、分隔符和引号。
该^
字符为转义字符。将其添加到特殊字符之前可使该字符被视为普通文本。
但是您可以通过将文本括在引号中来删除转义字符,例如:
for /f "skip=4" %%b ...