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

[文本处理] [已解决]这段批处理代码中的 echo 111 为什么被执行了两次?

[复制链接]
发表于 2012-4-11 12:23:32 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for  /f  "tokens=*" %%a in ('dir /a:-d /b *.rpt') do (
  4.         attrib -h "%%a"
  5.         for /f "delims=" %%b in (提取标志.txt) do (               
  6.                       echo 111:
  7.                       for /f "delims=" %%c in ('findstr "%%b" "%%a"') do (
  8.                            echo 333:
  9.                            pause
  10. )))                    
复制代码
那位高手解释下这段代码中的  echo  111  为什么被执行了两次; 把findstr函数换成 find函数 , echo  111  被执行1次求教  findstr用法

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-4-11 17:55:00 | 显示全部楼层
我晕 这个问题问的太让人无法回答了
俺觉得馁完全不了解For /F 是干嘛地

dir /a:-d /b *.rpt 你得先看这个结果有都多少行,echo 111 只要要被执行多少次。
然后再看看 提取标志.txt 这个文件里有多少行,他就会再被执行多少次。

For /F 是逐行读取内容的
 楼主| 发表于 2012-4-11 20:27:57 | 显示全部楼层
也许我沒说清楚,在一个循环里本应执行完echo 111要执行 echo 333 但却执行了两次 echo 111 才执行一次 echo 333!不知这次说明白了吗,最好执行下代码看看效果
发表于 2012-4-11 21:20:34 | 显示全部楼层
回复 3# byz001


    你把@echo off删掉,再执行一遍看看过程。
 楼主| 发表于 2012-4-14 09:30:07 | 显示全部楼层
与@ @echo off 有关系吗,我把findstr换成 find 发现echo 111被执行了一次说明与 @echo off没有关系吧
发表于 2012-4-14 11:00:52 | 显示全部楼层
回复 5# byz001


    把它删掉之后你可以看到执行过程,帮助你找到出错的原因。
 楼主| 发表于 2012-4-14 11:52:38 | 显示全部楼层
删掉@echo off也没用问题不出在哪里,主要是findstr这个函数的问题
 楼主| 发表于 2012-4-14 11:53:45 | 显示全部楼层
回复 6# gawk

删掉@echo off也没用问题不出在哪里,主要是findstr这个函数的问题
发表于 2012-4-14 12:17:40 | 显示全部楼层
回复 8# byz001


    你看不出来,也许别人可以帮你看出来。
发表于 2012-4-16 00:07:20 | 显示全部楼层
没办法,楼主谦虚点!
 楼主| 发表于 2012-4-16 09:11:38 | 显示全部楼层
本帖最后由 byz001 于 2012-4-16 09:17 编辑

回复 10# cjiabing


    与态度没什么关系吧,既然贴上来就是求教大家的,之所以说没用,是我把代码拿去做过实验的,没有试过我也不敢说没用!我只是说了我试验的结果而已,以求得问题的解决!
我现在看明白了上面仁兄说的是让我看看程序执行过程,回复之前我以为是去掉@echo off程序就可以得到正确的结果,所以才说没用的!在此说声:谢谢,对不起!
 楼主| 发表于 2012-4-16 09:38:37 | 显示全部楼层
本帖最后由 byz001 于 2012-4-16 09:45 编辑

问题应该找到了:在于findstr 这个函数如果没有查找到 字符串 则直接返回不继续执行下面的代码,如果找到 字符串 则继续执行下面的代码;find 这个函数应该是 无论找到 字符串 与否 都继续执行下面的代码。这是这两个函数的区别,希望对用到的仁兄有所帮助!
在此致谢参与回复的所有仁兄!特别致谢 gawk 的提示!
发表于 2012-4-16 13:33:34 | 显示全部楼层
不管你用 findstr 还是 find  echo 111 被执行的次数应该是一样多的。只是用 findstr 时,echo 333 少执行了一次,而不是 echo 111 多执行了一次。
发表于 2012-4-16 22:13:33 | 显示全部楼层
回复 11# byz001
呵呵,人家叫你这么做应该是有人家的想法的,应该先听听人家的意见。有时候虽然一两句话就可以解释清楚了,但人懒的时候就懒得跟你解释了。

发现问题后如何查找问题的症结所在:[原创] [分享]批处理调试手段与常见错误浅析
http://www.bathome.net/thread-15935-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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