似乎没有一种简单的方法可以获取批处理文件中字符串的长度。例如。,
SET MY_STRING=abcdefg
SET /A MY_STRING_LEN=???
我如何找到字符串的长度MY_STRING
?
如果字符串长度函数处理字符串中所有可能的字符(包括转义字符),则会加分,如下所示:!%^^()^!
.
由于没有内置的字符串长度函数,您可以编写自己的函数,如下所示:
@echo off
setlocal
REM *** Some tests, to check the functionality ***
REM *** An emptyStr has the length 0
set "emptyString="
call :strlen result emptyString
echo %result%
REM *** This string has the length 14
set "myString=abcdef!%%^^()^!"
call :strlen result myString
echo %result%
REM *** This string has the maximum length of 8191
setlocal EnableDelayedExpansion
set "long=."
FOR /L %%n in (1 1 13) DO set "long=!long:~-4000!!long:~-4000!"
(set^ longString=!long!!long:~-191!)
call :strlen result longString
echo %result%
goto :eof
REM ********* function *****************************
:strlen <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
(set^ tmp=!%~2!)
if defined tmp (
set "len=1"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!tmp:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "tmp=!tmp:~%%P!"
)
)
) ELSE (
set len=0
)
)
(
endlocal
set "%~1=%len%"
exit /b
)
该函数始终需要 13 个循环,而不是需要 strlen 循环的简单 strlen 函数。
它处理所有字符。
奇怪的表情(set^ tmp=!%~2!)
对于处理超长字符串是必要的,否则无法复制它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)