本帖最后由 zm900612 于 2011-4-9 09:26 编辑
我的想法:- @echo off
- set "$=%1"
- setlocal enabledelayedexpansion
- set len=8192
- (for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do (
- set /a len-="%%a!$:~%%a,1!"||set $=!$:~%%a!
- ))2>nul
- echo %len%
- ::未考虑字符串包含数字、特殊字符的情况
复制代码 稍加改进后仍然难以克服特殊字符的难关:- @echo off
- set "$=%1"
- setlocal enabledelayedexpansion
- set len=8192
- (for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do (
- set /a len-="%%a*^!(1-1!$:~%%a,1!)"||set $=!$:~%%a!
- ))2>nul
- echo %len%
- pause
- ::不惧怕数字了,但是仍然没有办法在set /a中很好地转义特殊字符,看来要想通用,那个if是不能省的了
复制代码
|