标题: [文本处理] [已解决]批处理命令echo后面怎么接管道? [打印本页]
作者: tigerpower 时间: 2015-7-6 21:19 标题: [已解决]批处理命令echo后面怎么接管道?
本帖最后由 tigerpower 于 2015-7-7 17:02 编辑
- echo ^<* A *^> | findstr A
复制代码
为什么说命令语法错误
作者: pcl_test 时间: 2015-7-6 21:38
- echo ^^^<* A *^^^> | findstr "A"
复制代码
作者: tigerpower 时间: 2015-7-6 23:08
能阐述一下原理吗,为什么要要转义两次?
作者: CrLf 时间: 2015-7-6 23:32
本帖最后由 CrLf 于 2015-7-6 23:36 编辑
回复 3# tigerpower
http://bbs.bathome.net/viewthrea ... amp;page=1#pid83430
按我的理解来说就是:管道前后存在语句块或者内部命令时,必然启动一个子进程来进行解析,所以要转义两次。- echo ^^^<* A *^^^> | findstr "A"
复制代码
的行为类似于- >管道.txt cmd /c echo ^^^<* A *^^^>
- <管道.txt findstr "A"
复制代码
作者: tigerpower 时间: 2015-7-7 10:12
本帖最后由 tigerpower 于 2015-7-10 18:34 编辑
总结一下- @echo off
- echo ^<* A *^> %= echo =%
- echo ^^^<* A *^^^> | findstr A %= echo + | =%
- cmd /c exit 65 & echo ^<* %=exitcodeascii% *^> %= int -> ascii =%
- exit|%ComSPec% /k prompt $L*$SA$S*$G | findstr A %= prompt =%
- set/p"=<* A *>"<nul | findstr A %= set =%
- mawk "BEGIN{print\"^<* A *^>\"}" | findstr A %= awk =%
- echo ^^^<* A *^^^> | sed -n "/<.*>/p" %= sed =%
- printf "<* A *>" | findstr A %= printf =%
复制代码
外部命令^用法也不太一样,我晕了,看来只有强记
作者: CrLf 时间: 2015-7-7 17:28
本帖最后由 CrLf 于 2015-7-7 17:30 编辑
回复 5# tigerpower
不会很复杂,记住几个规则就好了:
1、匿名管道至少需要同时开启前后两个进程来对接,一个负责输出,一个负责输入
2、内部命令必须要有 cmd /c 来执行
3、由 ()、&、| 形成的代码块必须由 cmd /c 来执行,而且会合并成一行
4、for /f %%a in ('[Command]') do 中调用的 [Command] 必须由 cmd /c 来执行
5、其他情况下,单独出现的外部命令不需要产生新的 cmd 进程
这就是为什么这两条是等价的- echo haha ^& echo what | findstr /n .
- (echo haha & echo what)| findstr /n .
复制代码
以及为什么这样也能执行,其实就是用 & 连成了一行- (
- echo a=test
- pause
- )|more
复制代码
作者: tigerpower 时间: 2015-7-7 22:14
原来()内的代码和不带括号的代码行为是不一样的
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |