2015-12-25 6 views
2

Можно ли ограничить длину переменной пакета? Я имею в виду, если можно запрограммировать переменную, которая допускает только символы от 0 до x? Итак, для экземпляра, если я ввел 123456 и максимальная длина была 4, она не продолжилась. Надеюсь, ты сможешь понять мой вопрос. Спасибо заранее.Как ограничить длину переменной партии

+0

Нет такого предела для такого предела; однако вы можете использовать расширение подстроки, например '% variable: ~ 4%', и проверить, является ли это пустым; если нет, длина строки превышает 4 символа ... – aschipfl

+0

Будь предупрежден: пакетный язык не предназначен для таких сложных задач, как тот, который вы, по-видимому, пытаетесь. Это не значит, что это невозможно сделать, но вы должны серьезно подумать над использованием лучшего языка. (Или, точнее, язык, который * был разработан, а не аккумулирован более или менее наугад.) –

+2

Для максимальной длины 4, 'if not '% var: ~ 4%" == "" goto ask_again' – rojo

ответ

3

Демонстрации партия коды в соответствии с предложениями 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 /?
1

Если вы имеете в виду «ограничить длину пакета переменной при чтении с помощью команды 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 команды, то нет никакого способа, чтобы сделать это. Конечно, вы можете выполнить такие команды и , затем вырезать значение переменной до максимальной длины, но этот процесс совсем другой.

Смежные вопросы