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 8100 characters, and no linefeeds or carriage returns (maximum total command line length is 8192).
To recognize line wrapping, command lines are interlaced with blank lines.
So in the following tables, you should treat command lines not separated by blank lines as a single command line.
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.0024 seconds