2012-10-03 20 views
8

Tôi đang viết tập lệnh theo lô nơi đầu vào của người dùng trống hoặc không kết thúc bằng "DTO". Tôi cần yêu cầu người dùng nhập tên DTO lần nữa.Cách kiểm tra xem đầu vào của người dùng có kết thúc bằng một chuỗi cụ thể theo lô (.bat) không.

:INPUT 
SET /P INPUTDTO=Enter the DTO: 

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

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

Làm thế nào để kiểm tra xem các đầu vào người dùng kết thúc với "DTO"

Trả lời

9

Giá trị INPUTDTO hiện có lẽ nên được xóa vì SET/P sẽ giữ gìn giá trị hiện tại nếu người dùng không nhập bất cứ điều gì.

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

Thêm /I chuyển sang câu lệnh IF nếu bạn muốn so sánh không phân biệt chữ hoa chữ thường.

+0

Cảm ơn nhiều dbenham :) – ams2705

+0

Tại sao có dấu ngoặc kép trong 'set "INPUTDTO ="' cần thiết? Cảm ơn bạn. – Sabuncu

+1

@Sabuncu - khi được định dạng như tôi có nó, với báo giá mở trước tên biến, sau đó bất kỳ văn bản nào sau khi trích dẫn cuối cùng bị bỏ qua. Nó ngăn chặn không gian trắng vô ý được đưa vào nhiệm vụ. Không cần thiết nếu dòng kết thúc ở nơi cần, nhưng một người bảo vệ an toàn tốt. – dbenham

1

Logic đơn giản, trước hết hãy loại bỏ bất kỳ lần xuất hiện nào của "DTO" khỏi chuỗi gốc của bạn và lưu nó vào một biến khác. Sau đó, so sánh nó với biến số INTPUTDTO gốc thêm một "DTO" ở cuối.

: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 

Ngoài ra, nếu bạn không quan tâm đến kịch bản phức tạp, sau đó chỉ cần sử dụng này:

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

Nếu bạn đang mở để sử dụng Phần mềm khác, bạn có thể sử dụng grep từ GnuWin32. Nó sẽ giúp bạn trở lại 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 
Các vấn đề liên quan