Можно ли ограничить длину переменной пакета? Я имею в виду, если можно запрограммировать переменную, которая допускает только символы от 0 до x? Итак, для экземпляра, если я ввел 123456 и максимальная длина была 4, она не продолжилась. Надеюсь, ты сможешь понять мой вопрос. Спасибо заранее.Как ограничить длину переменной партии
ответ
Демонстрации партия коды в соответствии с предложениями aschipfl и rojo:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
:UserPrompt
cls
set "UserInput="
set /P "UserInput=Enter string with a length between 1 and 4: "
if not defined UserInput goto UserPrompt
if not "!UserInput:~4!" == "" goto UserPrompt
echo/
echo String entered: !UserInput!
echo/
endlocal
pause
!UserInput:~4!
заменяются командным процессором на выполнении пакетного файла строка из пользовательского ввода, начиная с пятым символом. Первый символ строкового значения имеет значение индекса 0, которое является основанием для числа 4 для пятого символа. Эта строка пуста, если пользователь ввел строку длиной не более 4 символов, в противном случае эта подстрока будет не пустой, в результате пользователь должен снова ввести строку.
Отложенное расширение используется, чтобы избежать выхода пакетной обработки, вызванного синтаксической ошибкой, если пользователь вводит строку, содержащую нечетное число двойных кавычек.
Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
cls /?
echo /?
endlocal /?
if /?
pause /?
set /?
setlocal /?
Если вы имеете в виду «ограничить длину пакета переменной при чтении с помощью команды SET/P», то вы можете использовать подпрограмму ReadLine, описанную в this post, который эмулирует SET /P
команду, используя чистые команды пакетного файла, а просто вставьте максимальное ограничение длины.
@echo off
setlocal
call :ReadNChars string4="Enter 4 characters maximum: " 4
echo String read: "%string4%"
goto :EOF
:ReadNChars var="prompt" maxLen
rem Read a line emulating SET /P command
rem Antonio Perez Ayala
rem Initialize variables
setlocal EnableDelayedExpansion
echo > _
for /F %%a in ('copy /Z _ NUL') do set "CR=%%a"
for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
rem Show the prompt and start reading
set /P "=%~2" < NUL
set "input="
set i=0
:nextKey
set "key="
for /F "delims=" %%a in ('xcopy /W _ _ 2^>NUL') do if not defined key set "key=%%a"
rem If key is CR: terminate input
if "!key:~-1!" equ "!CR!" goto endRead
rem If key is BS: delete last char, if any
set "key=!key:~-1!"
if "!key!" equ "!BS!" (
if %i% gtr 0 (
set /P "=!BS! !BS!" < NUL
set "input=%input:~0,-1%"
set /A i-=1
)
goto nextKey
)
rem Insert here any filter on the key
if %i% equ %3 goto nextKey
rem Else: show and accept the key
set /P "=.!BS!%key%" < NUL
set "input=%input%%key%"
set /A i+=1
goto nextKey
:endRead
echo/
del _
endlocal & set "%~1=%input%"
exit /B
Однако, если вы хотите, чтобы ограничить длину переменной Batch в других случаях, например SET /A
или просто SET
команды, то нет никакого способа, чтобы сделать это. Конечно, вы можете выполнить такие команды и , затем вырезать значение переменной до максимальной длины, но этот процесс совсем другой.
Нет такого предела для такого предела; однако вы можете использовать расширение подстроки, например '% variable: ~ 4%', и проверить, является ли это пустым; если нет, длина строки превышает 4 символа ... – aschipfl
Будь предупрежден: пакетный язык не предназначен для таких сложных задач, как тот, который вы, по-видимому, пытаетесь. Это не значит, что это невозможно сделать, но вы должны серьезно подумать над использованием лучшего языка. (Или, точнее, язык, который * был разработан, а не аккумулирован более или менее наугад.) –
Для максимальной длины 4, 'if not '% var: ~ 4%" == "" goto ask_again' – rojo