2012-10-03 13 views
8

Piszę skrypt wsadowy, w którym, jeśli wprowadzane przez użytkownika jest puste lub nie kończy się na "DTO", muszę poprosić użytkownika o podanie nazwy DTO jeszcze raz.Jak sprawdzić, czy dane wejściowe użytkownika kończą się określonym ciągiem w skrypcie wsadowym (.bat)?

:INPUT 
SET /P INPUTDTO=Enter the DTO: 

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

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

Jak sprawdzić, czy dane wprowadzone przez użytkownika kończy się „DTO”

Odpowiedz

9

Istniejąca wartość INPUTDTO powinny zostać usunięte, ponieważ prawdopodobnie SET/P zachowa istniejącą wartość, jeśli użytkownik nie wprowadza niczego.

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

Dodaj przełącznik /I do instrukcji IF jeśli chcesz porównanie być przypadek niewrażliwe.

+0

Dzięki znacznie dbenham :) – ams2705

+0

Dlaczego cytaty z 'set "INPUTDTO ="' potrzebne? Dziękuję Ci. – Sabuncu

+1

@Sabuncu - gdy sformatowany tak, jak mam, z początkowym cytatem przed nazwą zmiennej, wtedy tekst po ostatnim cytacie jest ignorowany. Zapobiega nieumyślnemu umieszczaniu białego obszaru w zadaniu. Nie jest konieczne, jeśli linia kończy się w miejscu, w którym powinna, ale dobrze bezpieczna. – dbenham

1

Logika jest prosta, najpierw usuń wszelkie wystąpienia "DTO" z oryginalnego ciągu znaków i zapisz je w innej zmiennej. Następnie porównaj ją z oryginalną zmienną INTPUTDTO, dodając na końcu "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 

Ponadto, jeśli nie dbają o złożoności skryptu, a następnie po prostu użyć tego:

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

Jeśli jesteś otwarty na używanie innego Oprogramowania, możesz użyć grep z GnuWin32. Będzie to ustawić z powrotem 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 
Powiązane problemy