Определение длины строки штатными средствами 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
Вывод на экран для строк:
Set "String1=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
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]
Хотя, последнее легко исправить.
А про более быстрый алгоритм поговорим в следующей серии.