如何限制批处理变量的长度

时间:2015-12-25 22:29:44

标签: windows variables batch-file limit maxlength

是否可以限制批量变量的长度?我的意思是,如果可以编程只允许0到x字符之间的变量?因此,对于一个实例,如果我输入123456并且最大长度为4,则不会继续。我希望你能理解我的问题。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

根据aschipflrojo的建议展示批量代码:

@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 :(得分:1)

如果你的意思是"通过SET / P命令"来限制批量变量的长度,那么你可以使用{{3中描述的ReadLine子程序使用纯批处理文件命令模拟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命令,则无法执行此操作。当然,你可以执行这样的命令,然后将变量值剪切到最大长度,但这个过程是完全不同的。