为了账号安全,请及时绑定邮箱和手机立即绑定

如何在批处理文件中获得字符串长度?

如何在批处理文件中获得字符串长度?

尚方宝剑之说 2019-08-02 16:02:27
如何在批处理文件中获得字符串长度?在批处理文件中获取字符串的长度似乎没有一种简单的方法。例如,SET MY_STRING=abcdefg SET /A MY_STRING_LEN=???的字符串长度如何查找?MY_STRING?如果字符串长度函数处理字符串中的所有可能字符(包括转义字符),则加分如下:!%^^()^!.
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

由于没有针对字符串长度的内置函数,您可以编写自己的函数,如下所示:

@echo off
setlocal
set "myString=abcdef!%%^^()^!"
call :strlen result myString
echo %result%
goto :eof

:strlen <resultVar> <stringVar>
(   
    setlocal EnableDelayedExpansion
    set "s=!%~2!#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" ( 
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
)
( 
    endlocal
    set "%~1=%len%"
    exit /b
)

这个函数总是需要13个循环,而不是一个简单的strlen函数,它需要strlen循环。
它处理所有字符。




查看完整回答
反对 回复 2019-08-03
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可以通过将字符串写入文件,然后获取文件的长度,在批处理文件中执行两行操作。您只需减去两个字节,就可以计算添加到末尾的自动CR+LF。

假设您的字符串位于一个名为strvar:

ECHO %strvar%> tempfile.txt
FOR %%? IN (tempfile.txt) DO ( SET /A strlength=%%~z? - 2 )

字符串的长度现在位于一个名为strlength.

更详细的是:

  • FOR %%? IN (filename) DO ( ...

    获取有关文件的信息
  • SET /A [variable]=[expression]

    *对表达式进行数值计算
  • %%~z?

    *获取文件长度的特殊表达式

要将整个命令混成一行:

ECHO %strvar%>x&FOR %%? IN (x) DO SET /A strlength=%%~z? - 2&del x




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 824 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信