Board logo

标题: [文本处理] 统计字符串长度的批处理,诡异的错误,却找不到原因 [打印本页]

作者: 踏沙行    时间: 2018-7-26 10:36     标题: 统计字符串长度的批处理,诡异的错误,却找不到原因

本帖最后由 踏沙行 于 2018-7-26 14:22 编辑

代码一,可以正常运行
如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p str=<a.txt
  4. ::[方法1]
  5. set mx=50
  6. for /l %%a in (0,1,%mx%) do if "!str:~%%a,1!"=="" set num=%%a &goto ok
  7. :ok
  8. echo 长度=%num%
  9. ::pause
  10. ::[方法2]
  11. set /a st=0
  12. :loop
  13. if "!str:~%st%,1!" neq "" set /a st+=1&goto loop
  14. echo,len=%st%
  15. ::pause
  16. echo.[方法3]
  17. set /a n=8192*2,max=1
  18. set "var="
  19. pause
  20. for /l %%a in (1 1 14) do (
  21.   if defined var set /a n=var
  22.   echo n=%n%
  23.   pause
  24. )
复制代码
代码二,无法正常运行,其中[方法3]中的echo n=%n%一句根本不执行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p str=<a.txt
  4. ::[方法1]
  5. set mx=50
  6. for /l %%a in (0,1,%mx%) do if "!str:~%%a,1!"=="" set num=%%a &goto ok
  7. :ok
  8. echo 长度=%num%
  9. ::pause
  10. ::[方法2]
  11. set /a st=0
  12. :loop
  13. if "!str:~%st%,1!" neq "" set /a st+=1&goto loop
  14. echo,len=%st%
  15. ::pause
  16. echo.[方法3]
  17. set /a n=8192*2,max=1
  18. set "var="
  19. pause
  20. for /l %%a in (1 1 14) do (
  21.   if defined var set /a n=var
  22.   echo n=%n%
  23.   pause
  24.   set /a n/=2
  25.   for %%i in (!n!) do (
  26.     if "!str:~%%i,1!=="" (set /a var=n) else (
  27. set str=!str:~%%i!
  28. set /a max+=%%i,var-=%%i
  29.     )
  30.    )
  31. )
  32. endlocal
  33. echo 长度: %max%
  34. pause  
复制代码
不知道错在哪里了?
使用diffy语句全文比较,代码二前面部分和代码一是完全一致的
作者: Batcher    时间: 2018-7-26 13:44

第29行==左边少了个双引号
作者: 踏沙行    时间: 2018-7-26 13:48

回复 2# Batcher

谢谢,不过后面的错误,为什么会导致前面的echo不执行呢?
第25句
作者: 踏沙行    时间: 2018-7-26 14:11

反复测试发现,使用::注释后,会导致语句块的命令不执行。
如下:
  1. @echo off
  2. echo 开头停顿&pause
  3. for /l %%a in (1 1 5) do (
  4.   echo 中间停顿&pause
  5.   ::set/p=2
  6. )
  7. echo 结尾停顿&pause
复制代码
结果   echo 中间停顿&pause  一句并不显示

把::改为rem后,可以正常执行了。




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