标题: [文本处理] 统计字符串长度的批处理,诡异的错误,却找不到原因 [打印本页]
作者: 踏沙行 时间: 2018-7-26 10:36 标题: 统计字符串长度的批处理,诡异的错误,却找不到原因
本帖最后由 踏沙行 于 2018-7-26 14:22 编辑
代码一,可以正常运行
如下:- @echo off
- setlocal enabledelayedexpansion
- set /p str=<a.txt
-
- ::[方法1]
- set mx=50
- for /l %%a in (0,1,%mx%) do if "!str:~%%a,1!"=="" set num=%%a &goto ok
- :ok
- echo 长度=%num%
- ::pause
-
- ::[方法2]
- set /a st=0
- :loop
- if "!str:~%st%,1!" neq "" set /a st+=1&goto loop
- echo,len=%st%
- ::pause
-
- echo.[方法3]
- set /a n=8192*2,max=1
- set "var="
- pause
- for /l %%a in (1 1 14) do (
- if defined var set /a n=var
- echo n=%n%
- pause
- )
复制代码
代码二,无法正常运行,其中[方法3]中的echo n=%n%一句根本不执行- @echo off
- setlocal enabledelayedexpansion
- set /p str=<a.txt
-
- ::[方法1]
- set mx=50
- for /l %%a in (0,1,%mx%) do if "!str:~%%a,1!"=="" set num=%%a &goto ok
- :ok
- echo 长度=%num%
- ::pause
-
- ::[方法2]
- set /a st=0
- :loop
- if "!str:~%st%,1!" neq "" set /a st+=1&goto loop
- echo,len=%st%
- ::pause
-
- echo.[方法3]
- set /a n=8192*2,max=1
- set "var="
- pause
- for /l %%a in (1 1 14) do (
- if defined var set /a n=var
- echo n=%n%
- pause
- set /a n/=2
- for %%i in (!n!) do (
- if "!str:~%%i,1!=="" (set /a var=n) else (
- set str=!str:~%%i!
- set /a max+=%%i,var-=%%i
- )
- )
- )
- endlocal
- echo 长度: %max%
- pause
复制代码
不知道错在哪里了?
使用diffy语句全文比较,代码二前面部分和代码一是完全一致的
作者: Batcher 时间: 2018-7-26 13:44
第29行==左边少了个双引号
作者: 踏沙行 时间: 2018-7-26 13:48
回复 2# Batcher
谢谢,不过后面的错误,为什么会导致前面的echo不执行呢?
第25句
作者: 踏沙行 时间: 2018-7-26 14:11
反复测试发现,使用::注释后,会导致语句块的命令不执行。
如下:- @echo off
- echo 开头停顿&pause
- for /l %%a in (1 1 5) do (
- echo 中间停顿&pause
- ::set/p=2
- )
- echo 结尾停顿&pause
复制代码
结果 echo 中间停顿&pause 一句并不显示
把::改为rem后,可以正常执行了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |