2012-10-03 23 views
8

Estoy escribiendo un script por lotes donde si el usuario ingresa está vacío o no termina con "DTO" necesito pedirle al usuario que ingrese el nombre DTO de nuevo.Cómo verificar si la entrada del usuario finaliza con una cadena específica en el script por lotes (.bat)

:INPUT 
SET /P INPUTDTO=Enter the DTO: 

IF "%INPUTDTO%"=="" (
     IF "%INPUTDTO%" ??????? (
      GOTO NODTO 
    ) 
) 

:NODTO 
ECHO ERROR: Please enter a valid DTO. 
GOTO INPUT 

cómo comprobar si la entrada del usuario termina con "DTO"

Respuesta

9

El valor INPUTDTO existente, probablemente, debe ser limpiado porque SET/P preservará el valor existente si el usuario no introduce nada.

@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 
) 

Añadir el interruptor /I a la instrucción IF si desea que la comparación sea sensible a mayúsculas.

+0

Gracias mucho dbenham :) – ams2705

+0

¿Por qué las cotizaciones en 'set "INPUTDTO ="' necesitan? Gracias. – Sabuncu

+1

@Sabuncu: cuando se formatea como lo tengo, con la cita de apertura antes del nombre de la variable, se ignora cualquier texto posterior a la última cita. Impide que se incluya un espacio en blanco involuntario en la tarea. No es necesario si la línea termina donde debería, pero es una buena protección. – dbenham

1

La lógica es simple, primero elimine cualquier aparición de "DTO" de su cadena original y guárdela en otra variable. Luego, compárelo con la variable original INTPUTDTO agregando un "DTO" al final.

: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 

Además, si no se preocupan por la complejidad de la escritura, a continuación, sólo tiene que utilizar esto:

IF NOT "%INPUTDTO:DTO=%DTO"=="%INPUTDTO%" 
0

Si está abierto a usar otro software, puede usar grep desde GnuWin32. Se le costará 1,5 MB

@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 
Cuestiones relacionadas