[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 plp626 于 2011-5-25 11:47 编辑

以上两贴摘自:
http://baike.baidu.com/view/194921.htm
windows编程,俺真不懂。。。

=================================
如何生成控制台重定向标准的句柄的进程

http://support.microsoft.com/kb/190351

TOP

  1. cmd /q /c for /f %a in ('"for /f %a in ('echo 5678')do echo %a"')do echo %a
复制代码
多了一层就抓不到,这是怎么回事:
  1. cmd /q /c for /f %a in ('"for /f %a in ('"for /f %a in ('echo 1234')do echo %a"')do echo %a"')do echo %a
复制代码

TOP

还有这个帖子:http://bathome.net/viewthread.php?tid=9139&highlight=doskey
  1. cd&doskey/history
  2. for /f "delims=" %a in ('doskey/history')do @echo %a
复制代码

TOP

19楼,你测试了否? 我这里照样没法抓到。。

TOP

那次你那个引号的分隔符。。。
细想了下,还真是预处理的关系:
  1. cmd /q /c for /f %a in ('"for /f %a in ('for,/f,%a,in,^('echo,1234'^)do,echo,%a')do echo %a"') do echo %a
复制代码
但还在想其中缘由,,,

TOP

为什么空格在这里就不能再作为参数分割符,而要用逗号,分号或者等号?
  1. cmd /q /c for /f %a in ('"for /f %a in ('for=/f=%a=in=^('echo,1234'^)do=echo=%a')do echo %a"') do echo %a
复制代码

TOP

给空格加转义多此一举,这里主要是括号的原因:
  1. cmd /q /c for /f %a in ('"for /f %a in ('for /f %a in ^('echo,1234'^)do echo %a')do echo %a"') do echo %a
复制代码
参数分隔符在过程中仍旧还是:空格,制表符,逗号,分号,等号

TOP

原因来自括号匹配:
  1. cmd /q /c for /f %a in ('"for /f %a in ('for /f %a in ('echo,1234'^)do echo %a')do echo %a"') do echo %a
复制代码

TOP

本帖最后由 plp626 于 2011-5-25 18:52 编辑

可以这样理解for的二次预处理特性:
for ~ cmd内部的一个类似call的子过程。。。

这个内部子过程有/r /d /f 三个开关,有共同的do in 关键字,一对括号,有最多32个连续单字符名的内置变量
(相对call,若不shift则为10个);

/f 开关有eol,skip,usebackq,delims,tokens,5个关键字,他们作为/f开关的 “第一个参传递”

调用这个子过程的时候,参数分割符同call的参数分隔符;

TOP

我原来以为是for /f 的嵌套输出没有按预期输出,是不是和什么句柄有关。。。所以发了那样的疑问。。。

后面验证时和括号匹配有关。。。

遂把自己对for的理解一块放这里,好作为一个思考连贯的过程。。。

在我看来没有什么不会联系到一起的。。。

TOP

返回列表