标题: [其他] cmd管道中一个神奇的现象; [打印本页]
作者: lllsoslll 时间: 2012-4-13 19:55 标题: cmd管道中一个神奇的现象;
刚在cmd中键入复制代码
结果显示 x=123
这会儿这个现象又消失了。。。纳闷
作者: CrLf 时间: 2012-4-13 20:19
不会吧,那不是子进程里的变量么,听zqz谈及过,回头上电脑找下帖子
作者: gawk 时间: 2012-4-13 20:31
是幻觉
作者: applba 时间: 2012-4-13 20:33
- echo 2012/4/1|date
- echo %date%
复制代码
作者: lllsoslll 时间: 2012-4-13 20:34
话说这个现象能稳定的存在,那太爽了,求简单易行方法。。。
作者: CrLf 时间: 2012-4-13 21:48
本帖最后由 CrLf 于 2012-4-13 21:59 编辑
回复 5# lllsoslll
理论上应该不可能,zqz 的解释见:
http://bbs.bathome.net/redirect. ... 6&fromuid=30406
其后对于缓冲区异象的相关讨论见:
http://bbs.bathome.net/viewthread.php?tid=14455
而管道符与子进程的关系见(估计老兄应该知道这个的):
http://bbs.bathome.net/redirect. ... 0&fromuid=30406
归纳简述一下,管道前后存在语句块或者内部命令时,必然启动一个子进程来进行解析,所以 echo test|set /p input= 并非赋值失败,而是将值赋给子进程 cmd 中的 input 变量,而我们知道进程的变量环境只在创建时向下继承,创建之后的变量环境变动互不相干,因此当管道运行结束后,成功获取 input 变量的子进程随之退出,此时在父进程 cmd 中获取 input 变量新值的尝试是一定不会成功的。
作者: gawk 时间: 2012-4-13 22:30
回复 4# applba
跟楼主说的完全不是一回事
作者: lllsoslll 时间: 2012-4-15 18:43
复制代码
在cmd中,如何让上面命令执行后,x的值为abcd
doskey是否可实现?
这个实现了极大增强了cmd的功能。。
作者: CrLf 时间: 2012-4-15 18:52
本帖最后由 CrLf 于 2012-4-15 18:59 编辑
咦?突然发现楼主说的是 set 而非 set/p,我又跑偏了…不过目测感觉不可能啊,回头上机实验。不过不明白的是,楼主认为这和传统方案相比优势何在呢?
作者: lllsoslll 时间: 2012-4-15 19:51
你先实现了,我可以造一个惊喜给大家。。。
作者: Taurus 时间: 2012-5-7 03:17
我覺得樓主可能測試途中把 | 打成 ||
(echo 123||set x=
set x )>a.txt
start a.txt
作者: 秋风·飞扬 时间: 2012-5-7 12:15
回复 10# lllsoslll
期待惊喜啊
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |