我正试图让jrepl.bat在几行上工作。看到这个小测试:
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
echo First line%NL%second line | jrepl.bat i o
有没有理由只打印第一行:
Forst lone
答案 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