输出到标准输出

输出到标准输出
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"


  • 下边是我的适应避免使用四行不必要的"skip=4",也可以不加双引号,但需要正确逃脱在等号上,我们使用^

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
  • 输出文件内容.\File_With_Skip4.txt
    在此处输入图片描述

  • 文件内容(十六进制).\Hex_File_With_Skip4.txt
    在此处输入图片描述

for /f %a in ('"echo;prompt;$E|cmd"') do @echo;%a>>File_Without_Skip4.txt
  • 输出文件内容.\File_Without_Skip4.txt
    在此处输入图片描述

  • 文件内容(十六进制).\Hex_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在最后一行(第五行):

在此处输入图片描述

了解命令是由命令解释器处理的,并且它使用预定义的语法规则,并且在许多情况下,一个或多个字符的使用可以理解为命令补集、运算符、重定向器等。这些字符的行为与文字用法不同,文档将它们称为特殊字符,如果我们在不使用转义符的情况下使用它们,它们可能会并且会产生不同的干扰。

欲了解更多信息,请阅读上面链接的参考资料。


其他资源:

答案2

操作方法:在 Windows 命令行中转义字符、分隔符和引号

^字符为转义字符。将其添加到特殊字符之前可使该字符被视为普通文本。

但是您可以通过将文本括在引号中来删除转义字符,例如:

for /f "skip=4" %%b ...

相关内容