[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
不会吧,那不是子进程里的变量么,听zqz谈及过,回头上电脑找下帖子

TOP

本帖最后由 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 变量新值的尝试是一定不会成功的。

TOP

本帖最后由 CrLf 于 2012-4-15 18:59 编辑

咦?突然发现楼主说的是 set 而非 set/p,我又跑偏了…不过目测感觉不可能啊,回头上机实验。不过不明白的是,楼主认为这和传统方案相比优势何在呢?

TOP

返回列表