如何检查用户输入是否以批处理(.bat)脚本中的特定字符串结尾

时间:2012-10-03 16:35:36

标签: batch-processing batch-file

我正在编写批处理脚本,如果用户输入为空或不以“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”结尾

4 个答案:

答案 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”。