- (echo TestStr&echo.)|findstr /o ".*">a.txt
复制代码 打开回显,一目了然。这句中之所以多出来一个空格,原因是预处理时语句被重组成“规范”的格式:- (echo TestStr & echo.) | findstr /o ".*"
复制代码 做了如下一组实验:- rem>nul 3>test.txt
- echo TestStr
- echo TestStr&echo.
- (echo TestStr&echo.)
- (echo TestStr&echo.)|findstr /o ".*"
- test.txt
复制代码 可见 echo TestStr 时,cmd 为其后缀一个仅在预处理中有效的空格,而 & 号又为自身前后添加一个空格。当管道中出现语块或者存在内部命令时,管道前的内容将作为参数交给新的 cmd 进程,此时原本只存在于预处理中的空格也许因为被新的 cmd 进程误认为是 echo 命令的参数而非分隔符显示出来。 |