Длина строки в переменной CMD/BAT (простой, но медленный алгоритм)
Определение длины строки штатными средствами CMD/BAT тот еще геморрой, но понадобилось, потому расскажу про несколько способов. В этом выпуске самый простой.
Команда
set: экспериментально 1024 символа.Общий размер переменной: 8191 символ.
Длина командной строки: 8191 символ.
Отсюда
Внимание! Совместимость алгоритмов от Windows XP и выше. Т.е. для DOS и Windows 9x не подойдет.
Есть медленное, но простое решение "в лоб":
1. Задать циклу
for перебирать числа от 0 до какого-нибудь заведомо большого числа, например 9000.for /L %%a in (0,1,9000) do [...]2. Получать из строки символ под номером
%%a:param:~%%a,1В общем виде:
param:a,bгде:
param: - взять из переменной param символ(ы)a - позиция нужного символаb - количество символов3. Сравнивать его с пустой строкой, и если строка не пуста (
NEQ):if "!param:~%%a,1!" NEQ "" ( [...]4. Прибавить счетчик символов в отдельной переменной:
Set /a "len+=1"Иначе прервать цикл.
Можно реализовать это в виде функции BAT-файла:
:Strlen
SetLocal EnableExtensions EnableDelayedExpansion
Set Out=%~0
Set "param=%~1"
Set "len=0"
for /L %%a in (0,1,9000) do (
if "!param:~%%a,1!" NEQ "" (
Set /a "len+=1"
) else goto :_break
)
:_break
Пример BAT-файла на GitHub
Вывод на экран для строк:
Set "String1=ABCDEFGHIJKLMNOPQRSTUVWXYZabcde fghijklmnopqrstuvwxyz0123456789"
Set "String2=132 sd72 362 232 83827 3n238237"
Set "String3=1 >>>32 lnsdfn lskd &&&&& _----__\\\\|||sd72 *&&&@@######~~~~~362 232 83827 3n238237"
Set "String4=A"
Set "String5=%%1"Последняя строка задается в качестве параметра командной строки BAT-файла.
>strlenslow.bat 7894561230.
Length String 1 - [62]
Length String 2 - [31]
Length String 3 - [88]
Length String 4 - [1]
Length String 5 (Command Line Parameter) - [11]Проблемы алгоритма:
1. Медленный
2. Если задать пустую строку в параметре командной строки - алгоритм ломается:
>strlenslow.bat
[...]
Length String 5 (Command Line Parameter) - [9001]Хотя, последнее легко исправить.
А про более быстрый алгоритм поговорим в следующей серии.
Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/04/26/dli