说明如何批处理新行variables黑客工作
有人可以解释这是如何工作的?
@echo off REM Creating a Newline variable (the two blank lines are required!) set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM% REM Example Usage: echo There should be a newline%NL%inserted here. 发出:
 There should be a newline inserted here. 
从如何在batch file中回显换行符?
 这个技巧使用插入符的行为。 
 在Long命令中也解释了在Vista / DOS批处理(.bat)文件中的多行分割 
脱字符是下一个字符的转义字符,或者在行尾用作多行字符,但是这几乎是相同的。
 在行末,它只是转义下一个字符,在这种情况下是<Linefeed> ,但是有一个隐藏的特性,所以如果转义字符是<LF>它将被忽略,下一个字符被读取和转义,但是这个即使它也是一个<LF> ,字符将永远逃脱。 
现在你可以理解了
 set NLM=^ rem Two empty lines are required here 
  NLMvariables只包含一个<LF>字符但是,如果您尝试使用echo Line1%NLM%Line2它会失败,因为parsing器停止parsing一个<LF> 。 
 但是这个工作 
 echo Line1^ Line2 
 所以你需要把一个转义的换行添加到行中,那就是NLvariables。  NLvariables只包含三个字符。 
  NL=^<LF><LF>如果这是展开的,创build只有一个转义后的<LF>作为第一个<LF>将被忽略。 
顺便说一句。 在我看来,使用延迟扩展的换行要容易得多,因为没有必要逃脱任何东西。
 setlocal EnableDelayedExpansion set NLM=^ echo Line1!NLM!Line2 
  编辑:附加一些提示有用的使用<LF> 
  1)在echo中用它作为换行符 
 setlocal EnableDelayedExpansion set LF=^ echo Line1!LF!Line2 
2)用它来分割括号中的命令
 setlocal EnableDelayedExpansion set LF=^ ( echo Line1%LF%set x=4%LF%echo !x!%LF% ) 
  3)在FOR / F循环中创build一个(几乎)空的EOL-chararcter,因为<LF>是<LF>的一个EOL的行分隔符与空行相同。 
 FOR /F ^"eol^=^ delims^=^" %%a in (myFile.php) do echo %%a 
4)使用LF在FOR / F循环中分割文本
 setlocal EnableDelayedExpansion set LF=^ rem ** Two empty lines required set "var=Content1;Content2" FOR /F "delims=" %%a in ("%var:;=!LF!%") do ( echo %%a ) 
似乎有一种方式 ,也可以使用pipe道:
 (echo 1st line^ &echo 2nd line) | sort