jrepl.bat只打印第一行

时间:2015-06-03 06:33:25

标签: batch-file

我正试图让jrepl.bat在几行上工作。看到这个小测试:

set NLM=^


set NL=^^^%NLM%%NLM%^%NLM%%NLM%
echo First line%NL%second line | jrepl.bat i o

有没有理由只打印第一行:

Forst lone

2 个答案:

答案 0 :(得分:2)

正如@MCND提到的那样,这是子进程的问题,并且该行被解析了两次。

但可以通过简单的换行来完成。

set LF=^


cmd /q /v /c"echo First line^!LF^!second line" | jrepl.bat i o

这与延迟扩展模式无关。

好像在批处理文件中启用了延迟扩展,感叹号会在延迟扩展解析器阶段转义(并删除插入符号)。
如果禁用延迟扩展,那么带有插入符号的行将在子cmd.exe进程中不变地执行,但是在特殊字符集阶段会删除插入符号,因此延迟扩展也将在以后工作。

答案 1 :(得分:0)

管道是在进程之间创建的,因此,echo命令在单独的cmd实例中执行,该实例不会按预期解析输入行(使用内部行提要)。

尝试

setlocal enableextensions disabledelayedexpansion
set NLM=^


set NL=^%NLM%%NLM%^%NLM%%NLM%
cmd /q /v /c"echo First line!NL!second line" | jrepl.bat i o