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

[其他] 批处理skip的值不能由上一个FOR的结果传递过来?

如题:

  这种结构的代码:

  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('type list.txt^|findstr /n .*^|find /i "ie"') do (
  3.     for /f "skip=%%a delims=" %%i in (list.txt) do @echo %%i
  4.   )
  5. pause
复制代码

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=:" %%a in ('type list.txt^|findstr /n .*^|find /i "ie"') do (
  4.     set num=%%a
  5.     for /f "skip=!num! delims=" %%i in (list.txt) do @echo %%i
  6.   )
  7. pause
复制代码


这两种方法都不行,除非两个for分开来才可以,这是什么原因呢?
不大可能的事也许今天实现,根本不可能的事也许明天会实现

确实是个经典的老问题,就如同for /r 后面的路径一样,不能直接在for勘套中使用变量,要先call跳出来处理.
原因解释不清,就当它是一种格式吧.   就象   %%a  in    呵呵,照写就是了.
不止是sikp  ,tokens ,等都不可以.

我的理解是 for 的延迟变量只对 do 后面的语句有效,前面的部分只能引用for 外面的变量
你在for前面给num赋值试试就知道了.

[ 本帖最后由 随风 于 2007-12-14 00:23 编辑 ]
技术问题请到论坛发帖求助!

TOP

果然如此,在第一个for前面定义num的值后就可以正确执行!
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

测试了一会,确实是没有方法,使用直接传递过来的变量,不过换了一总方法好像可行.
  1. @echo off
  2. for %%i in (4) do (
  3. call :a %%i
  4. :a
  5. for /f "skip=%1 tokens=%1" %%j in (2.txt) do (echo.%%j)
  6. )
  7. pause
  8. 下面是2.txt内容.
  9. 1 2 3 4 5 6 7
  10. 2 2 3 5 5 6 7
  11. 3 2 3 6 5 6 7
  12. 4 2 3 7 5 6 7
  13. 1 2 3 8 5 6 7
  14. 1 2 3 9 5 6 7
  15. 1 2 3 10 5 6 7
  16. 1 2 3 4 5 6 7
  17. 1 2 3 4 5 6 7
复制代码

TOP

亏你想的出来啊,在for内部使用标签,
似乎在哪见过,说最好不要在for内部使用标签,具体有什么不好,我也说不出.
这种方法应该等同跳出了第一个for吧.

[ 本帖最后由 随风 于 2007-12-14 01:11 编辑 ]
技术问题请到论坛发帖求助!

TOP

呵呵..还真不知道..

这样CALL等同于跳出了一个FOR还有待商榷,
我以为 当标签处于FOR外面的时候才算是跳了出去吧.

[ 本帖最后由 泛滥棏慌° 于 2007-12-14 01:31 编辑 ]

TOP

我也想知道在for内部使用标签具体有什么不好

我也偶尔在for内部使用标签
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

测试了下,也没发现什么不好,可能是我走入了误区了吧
现实中也很少看到这样的用法.
我总结的原因是:
   通常用for作循环的时候,都是需要遍历整个文本的,若是在满足某条件后goto的话,那么标签也不用放在for内部了,因为若是 if ....goto .... 的话,当条件满足时,for虽仍会遍历整个文本,但是却不会再作任何处理了.也就是说for内部的标签应该是多余的.完全可以放在外面.
不知道对不对,只是个人的看法.
技术问题请到论坛发帖求助!

TOP

呵呵
这个问题没有遇到过,收获了
不过我遇到过一个类似的问题
for语句里面的()里面不能有表达式
大家自己测试下看对不对?
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

返回列表