我正在编写批处理脚本,如果用户输入为空或不以“DTO”结尾,我需要让用户再次输入DTO名称。
:INPUT
SET /P INPUTDTO=Enter the DTO:
IF "%INPUTDTO%"=="" (
IF "%INPUTDTO%" ??????? (
GOTO NODTO
)
)
:NODTO
ECHO ERROR: Please enter a valid DTO.
GOTO INPUT
如何检查用户输入是否以“DTO”结尾
答案 0 :(得分:13)
现在的INPUTDTO值可能应该被清除,因为如果用户没有输入任何内容,SET / P将保留现有值。
@echo off
set "INPUTDTO="
:INPUT
SET /P INPUTDTO=Enter the DTO:
if "%INPUTDTO:~-3%" neq "DTO" (
ECHO ERROR: Please enter a valid DTO.
goto INPUT
)
如果您希望比较不区分大小写,请将/I
开关添加到IF语句。
答案 1 :(得分:1)
逻辑很简单,首先从原始字符串中删除任何“DTO”,然后将其存储到另一个变量中。然后将其与原始INTPUTDTO
变量进行比较,最后添加“DTO”。
:INPUT
SET /P INPUTDTO=Enter the DTO:
SET NEWINPUTDTO=%INPUTDTO:DTO=%
IF "%INPUTDTO%"=="" (
IF NOT "%NEWINPUTDTO%DTO"=="%INPUTDTO%" (
GOTO NODTO
)
)
:NODTO
ECHO ERROR: Please enter a valid DTO.
GOTO INPUT
另外,如果您不关心脚本的复杂性,那么只需使用:
IF NOT "%INPUTDTO:DTO=%DTO"=="%INPUTDTO%"
答案 2 :(得分:1)
如果您愿意使用其他软件,则可以使用GnuWin32中的grep。它会让你回到1.5MB
@echo off
:INPUT
SET /P INPUTDTO=Enter the DTO:
echo %INPUTDTO% | grep .*DTO\b
IF %ERRORLEVEL%==1 (
goto NODTO
)
goto:eof
:NODTO
ECHO ERROR: Please enter a valid DTO.
GOTO INPUT
答案 3 :(得分:0)
也许您可以使用此处所述的子字符串功能:What is the best way to do a substring in a batch file?。
然后将该子串再次比较为“DTO”。