18

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

4 回答 4

21

可能应该清除现有的 INPTDTO 值,因为如果用户不输入任何内容,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 语句。

于 2012-10-03T17:09:40.103 回答
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%"
于 2012-10-03T17:10:03.923 回答
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
于 2012-10-03T17:17:34.790 回答
0

也许您可以使用此处描述的子字符串功能:在批处理文件中执行子字符串的最佳方法是什么?.

然后将该子字符串与“DTO”进行比较。

于 2012-10-03T17:11:43.047 回答