Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批量获取字符串长度_Batch File - Fatal编程技术网

Batch file 批量获取字符串长度

Batch file 批量获取字符串长度,batch-file,Batch File,我想这是一个简单的问题,但我只能找到复杂情况的答案。 我的场景是,我有一个名为AAA的变量,它没有空格,没有特殊字符,只有字母、数字,可能还有下划线。我需要检查AAA的长度是否不超过16个字符(16个字符或更少就可以了) 我怎样才能批量实现这一点 谢谢,您可以这样做: if "%AAA:~16%" == "" echo "Length is not bigger than 16 characters." 或 这里有几个计算字符串长度的函数: 因此,要检查字符串长度是否大于16: @echo o

我想这是一个简单的问题,但我只能找到复杂情况的答案。 我的场景是,我有一个名为AAA的变量,它没有空格,没有特殊字符,只有字母、数字,可能还有下划线。我需要检查AAA的长度是否不超过16个字符(16个字符或更少就可以了)

我怎样才能批量实现这一点

谢谢,

您可以这样做:

if "%AAA:~16%" == "" echo "Length is not bigger than 16 characters."


这里有几个计算字符串长度的函数:

因此,要检查字符串长度是否大于16:

@echo off
set AAA=something

call :strlen0.3 AAA strlen
 if %strlen% GTR 16 (
    echo has more than 16 characters
 ) else (
    echo has less than 16 characters
 )

 exit /b 0


:strlen0.3  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%A in (2187 729 243 81 27 9 3 1) do (
    set /A mod=2*%%A
    for %%Z in (!mod!) do (
        if "!s:~%%Z,1!" neq "" (
            set /a "len+=%%Z"
            set "s=!s:~%%Z!"

        ) else (
            if "!s:~%%A,1!" neq "" (
                set /a "len+=%%A"
                set "s=!s:~%%A!"
            )
        )
    )
  )
  endlocal & if "%~2" neq "" (set %~2=%len%) else echo **%len%**
exit /b

谢谢你的快速回复。这正是我需要的!
@echo off
set AAA=something

call :strlen0.3 AAA strlen
 if %strlen% GTR 16 (
    echo has more than 16 characters
 ) else (
    echo has less than 16 characters
 )

 exit /b 0


:strlen0.3  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%A in (2187 729 243 81 27 9 3 1) do (
    set /A mod=2*%%A
    for %%Z in (!mod!) do (
        if "!s:~%%Z,1!" neq "" (
            set /a "len+=%%Z"
            set "s=!s:~%%Z!"

        ) else (
            if "!s:~%%A,1!" neq "" (
                set /a "len+=%%A"
                set "s=!s:~%%A!"
            )
        )
    )
  )
  endlocal & if "%~2" neq "" (set %~2=%len%) else echo **%len%**
exit /b