Board logo

标题: [文本处理] [已解决]我这样使用批处理for命令为什么只能赋值一次? [打印本页]

作者: 迷彩的SF    时间: 2011-11-4 13:10     标题: [已解决]我这样使用批处理for命令为什么只能赋值一次?

本帖最后由 迷彩的SF 于 2011-11-6 11:53 编辑

1.txt文件的内容如下:
  1. aa
  2. ccccccccccccccccccccccccccccccccccccccc
  3. eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
  4. ggggggggggggggggggggggggggggggggggggggg
  5. wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
  6. zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
复制代码
我想用如下代码读取并显示每行字数:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set num=0
  4. for /f %%a in (1.txt) do (
  5.     set num1=%%a
  6.    
  7.     :do
  8.     if not "!num1:~%num%,1!" equ "" (
  9.        set /a num+=1 & goto do
  10.        ) else (
  11.        echo The number of this sentence is %num%
  12.        )
  13.     echo Press any key to continue......
  14.     pause>nul
  15. )
  16. echo;Over
  17. pause>nul
复制代码
但是在测试中我发现for的赋值只能执行一次,在显示 The number of this sentence is 2 之后紧接着就显示Over,随后按任意键就退出程序了,希望那位可以解释下,谢谢
作者: awk    时间: 2011-11-4 17:04

不要在for循环内部定义标签
作者: 601997526    时间: 2011-11-4 20:40

把标签定在for外部吧,再在for内部用call命令调用
作者: 迷彩的SF    时间: 2011-11-5 12:39

那么这是什么原因呢?
作者: hankerer    时间: 2011-11-5 12:44

那么这是什么原因呢?
迷彩的SF 发表于 2011-11-5 12:39


没有为什么,就是这么规定的
作者: hfg1977    时间: 2011-11-5 14:38

循环体内使用goto代表循环体的结束,无论你使用多少重嵌套.
作者: wc726842270    时间: 2011-11-5 16:07

回复 5# hankerer


    这也谈不上什么规定,只不过理解要从CPU和内存上放手了,也就是“计算机原理”,
PS:我所说的只是个人观点
作者: 迷彩的SF    时间: 2011-11-6 11:51

谢谢楼上的各位,我弄清楚了.




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2