2012-10-03 13 views

risposta

9

Il valore INPUTDTO esistente dovrebbe probabilmente essere cancellato perché SET/P sarà preservare il valore esistente se l'utente non immette nulla.

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

aggiungere l'opzione /I per l'istruzione IF, se si desidera che il confronto sia case insensitive.

+0

Ringrazia molto dbenham :) – ams2705

+0

Perché sono le citazioni in 'impostare "INPUTDTO ="' necessari? Grazie. – Sabuncu

+1

@Sabuncu - quando formattato come lo sono io, con la citazione iniziale prima del nome della variabile, qualsiasi testo dopo l'ultima citazione viene ignorato. Impedisce l'inclusione dello spazio bianco involontario nel compito. Non necessario se la linea finisce dove dovrebbe, ma una buona guardia sicura. – dbenham

1

La logica è semplice, rimuovere prima tutte le occorrenze di "DTO" dalla stringa originale e memorizzarla in un'altra variabile. Quindi confrontalo con la variabile originale INTPUTDTO aggiungendo un "DTO" alla fine.

: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 

Inoltre, se non si cura di sceneggiatura complessità, poi basta usare questo:

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

Se si è aperti a utilizzare altro software, è possibile utilizzare grep da GnuWin32. Essa vi costerà 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 
Problemi correlati