找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28916|回复: 11

[其他] cmd管道中一个神奇的现象;

[复制链接]
发表于 2012-4-13 19:55:08 | 显示全部楼层 |阅读模式
刚在cmd中键入
  1. echo 123|set x=
  2. set x
复制代码
结果显示 x=123

这会儿这个现象又消失了。。。纳闷
发表于 2012-4-13 20:19:28 | 显示全部楼层
不会吧,那不是子进程里的变量么,听zqz谈及过,回头上电脑找下帖子
发表于 2012-4-13 20:31:46 | 显示全部楼层
是幻觉
发表于 2012-4-13 20:33:37 | 显示全部楼层
  1. echo 2012/4/1|date
  2. echo %date%
复制代码
 楼主| 发表于 2012-4-13 20:34:45 | 显示全部楼层
话说这个现象能稳定的存在,那太爽了,求简单易行方法。。。
发表于 2012-4-13 21:48:36 | 显示全部楼层
本帖最后由 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 变量新值的尝试是一定不会成功的。
发表于 2012-4-13 22:30:21 | 显示全部楼层
回复 4# applba


    跟楼主说的完全不是一回事
 楼主| 发表于 2012-4-15 18:43:36 | 显示全部楼层
  1. echo abcd|set x=
复制代码
在cmd中,如何让上面命令执行后,x的值为abcd
doskey是否可实现?
这个实现了极大增强了cmd的功能。。
发表于 2012-4-15 18:52:20 | 显示全部楼层
本帖最后由 CrLf 于 2012-4-15 18:59 编辑

咦?突然发现楼主说的是 set 而非 set/p,我又跑偏了…不过目测感觉不可能啊,回头上机实验。不过不明白的是,楼主认为这和传统方案相比优势何在呢?
 楼主| 发表于 2012-4-15 19:51:10 | 显示全部楼层
你先实现了,我可以造一个惊喜给大家。。。
发表于 2012-5-7 03:17:31 | 显示全部楼层
我覺得樓主可能測試途中把 | 打成 ||

(echo 123||set x=
set x )>a.txt
start a.txt
发表于 2012-5-7 12:15:15 | 显示全部楼层
回复 10# lllsoslll


    期待惊喜啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 01:04 , Processed in 0.020771 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表