是否可以限制批量变量的长度?我的意思是,如果可以编程只允许0到x字符之间的变量?因此,对于一个实例,如果我输入123456并且最大长度为4,则不会继续。我希望你能理解我的问题。 提前谢谢。
答案 0 :(得分:3)
@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
命令,则无法执行此操作。当然,你可以执行这样的命令,然后将变量值剪切到最大长度,但这个过程是完全不同的。