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

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

本帖最后由 踏沙行 于 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语句全文比较,代码二前面部分和代码一是完全一致的

第29行==左边少了个双引号
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher

谢谢,不过后面的错误,为什么会导致前面的echo不执行呢?
第25句

TOP

反复测试发现,使用::注释后,会导致语句块的命令不执行。
如下:
  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后,可以正常执行了。

TOP

返回列表