Как вы получаете длину строки в пакетном файле? - PullRequest
61 голосов
/ 30 апреля 2011

Кажется, нет простого способа получить длину строки в командном файле. Например.,

SET MY_STRING=abcdefg
SET /A MY_STRING_LEN=???

Как найти длину строки MY_STRING?

Бонусные баллы, если функция длины строки обрабатывает все возможные символы в строках, включая escape-символы, например: !%^^()^!.

Ответы [ 14 ]

0 голосов
/ 04 мая 2019
@ECHO OFF

SET string=
SET /A stringLength=0

:CheckNextLetter
REM Subtract the first letter and count up until the string="".
IF "%string%" NEQ "" (
    SET string=%string:~1%
    SET /A stringLength=%stringLength%+1
    GOTO :CheckNextLetter
) ELSE (
    GOTO :TheEnd
)

:TheEnd
    ECHO There is %stringLength% character^(s^) in the string.
PAUSE

Это работает для меня.Надеюсь, что это полезно для кого-то еще.Не нужно настраивать на любую длину.Я просто удаляю первую букву и сравниваю с "", пока строка не будет равна "".

0 голосов
/ 04 декабря 2018

Это Намного проще !

Чистый пакетный раствор. Нет временных файлов. Нет длинных скриптов.

@echo off
setlocal enabledelayedexpansion
set String=abcde12345

for /L %%x in (1,1,1000) do ( if "!String:~%%x!"=="" set Lenght=%%x & goto Result )

:Result 
echo Lenght: !Lenght!

1000 - максимальная предполагаемая длина строки. Измените его в зависимости от ваших потребностей.

0 голосов
/ 10 января 2017

Я хочу предвосхитить это, сказав, что я мало знаю о написании кода / скрипта / и т.д.но думал, что поделюсь решением, которое, кажется, придумал.Большинство ответов здесь, вроде как, пошли мне на ум, поэтому мне было любопытно узнать, сопоставимо ли написанное мной.

@echo off

set stringLength=0

call:stringEater "It counts most characters"
echo %stringLength%
echo.&pause&goto:eof

:stringEater
set var=%~1
:subString
set n=%var:~0,1%
if "%n%"=="" (
        goto:eof
    ) else if "%n%"==" " (
        set /a stringLength=%stringLength%+1
    ) else (
        set /a stringLength=%stringLength%+1
    )
set var=%var:~1,1000%
if "%var%"=="" (
        goto:eof
    ) else (
        goto subString
    )

goto:eof
0 голосов
/ 14 апреля 2015
@echo off
::   warning doesn't like * ( in mystring

setlocal enabledelayedexpansion 

set mystring=this is my string to be counted forty one

call :getsize %mystring%
echo count=%count% of "%mystring%" 

set mystring=this is my string to be counted

call :getsize %mystring%

echo count=%count% of "%mystring%" 

set mystring=this is my string
call :getsize %mystring%

echo count=%count% of "%mystring%" 
echo.
pause
goto :eof

:: Get length of mystring line ######### subroutine getsize ########

:getsize

set count=0

for /l %%n in (0,1,2000) do (

    set chars=

    set chars=!mystring:~%%n!

    if defined chars set /a count+=1
)
goto :eof

:: ############## end of subroutine getsize ########################
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...