There are several techniques to get the length of a string.
I will list some of these here, each with their pros and cons.
As always, enclose a string in doublequotes if it contains any "special characters, e.g. space, tab, ampersand, redirect, pipe, percent, exclamation, comma, caret, etc.
In batch-only solutions, strings are limited to a single line only, not much longer than 8000 characters, and no linefeeds or carriage returns (maximum total command line length is 8192).
Get String Length | ||
---|---|---|
# | Code | Pros and Cons |
1 | >%Temp%\~stringlength.tmp ECHO AbcdEfgh REM SET /A is used to subtract 2, compensating for the REM carriage return linefeed appended by the ECHO command FOR %%A IN (%Temp%\~stringlength.tmp) DO ( SET /A StringLength = %%~zA - 2 ) DEL %Temp%\~stringlength.tmp ECHO Length of string AbcdEfgh is %StringLength% |
|
2 | SETLOCAL ENABLEDELAYEDEXPANSION SET String=AbcdEfgh SET Length=0 FOR /L %%A IN (0,1,8100) DO ( IF NOT "!String:~%%A,1!"=="" ( SET /A Length = %%A + 1 ) ) ECHO Length of string AbcdEfgh is %Length% ENDLOCAL |
|
3 | CALL :StringLength strlen "AbcdEfgh" ECHO Length of string "AbcdEfgh" is %strlen% GOTO:EOF :StringLength :: Based on code by jeb on StackOverflow.com :: https://stackoverflow.com/a/5841587 :: Usage: CALL :StringLength resultvarname string :: string must be doublequoted if it contains spaces :: or special characters (e.g. ampersand, redirect, :: pipe, percent, exclamation, comma, caret). :: Doublequotes are not counted in length. SETLOCAL ENABLEDELAYEDEXPANSION SET string=%~2 IF DEFINED string ( SET L=1 FOR %%P IN (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) DO ( IF "!string:~%%P,1!" NEQ "" ( SET /A L += %%P SET string=!string:~%%P! ) ) ) ELSE ( SET L=0 ) ( ENDLOCAL SET %~1=%L% GOTO:EOF ) |
|
4 | SET String=AbcdEfgh FOR /F "usebackq" %%A IN (`pwsh.exe -c "'%String%'.Length"`) DO ( SET Length=%%A ) ECHO Length of string "%String%" is %Length% |
|
page last modified: 2024-07-23; loaded in 0.0022 seconds