Toán tử hàng loạt không bằng nhau (bất đẳng thức)


264

Theo đó , !==!là toán tử chuỗi không bằng nhau. Dùng thử, tôi nhận được:

C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.

Tôi đang làm gì sai?

Câu trả lời:



105

Sử dụng NEQ thay thế.

if "asdf" NEQ "fdas" echo asdf

37
điều này đòi hỏi phải mở rộng lệnh (Theo mặc định là trên 2000+ nhưng có thể tắt toàn bộ hệ thống hoặc làm tham số cho cmd.exe) Thông thường bạn nên bật chúng bằng setlocal, nhưng để kiểm tra đơn giản, nếu không bằng, chỉ cần sử dụng "nếu không", nó sẽ quay trở lại thời kỳ cũ của DOS
Anders

29

Tôi biết điều này khá lỗi thời, nhưng điều này vẫn có thể hữu ích cho những người đến muộn trong bữa tiệc. (EDIT: được cập nhật vì điều này vẫn nhận được lưu lượng truy cập và @Goozak đã chỉ ra trong các nhận xét rằng phân tích ban đầu của tôi về mẫu cũng không chính xác.)

Tôi lấy cái này từ mã ví dụ trong liên kết của bạn:

IF !%1==! GOTO VIEWDATA
REM  IF NO COMMAND-LINE ARG...
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
REM  PRINT LINE WITH STRING MATCH, THEN EXIT.

:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
REM  SHOW ENTIRE FILE, 1 PAGE AT A TIME.

:EXIT0

!%1==!chỉ đơn giản là một cách sử dụng thành ngữ ==nhằm mục đích xác minh rằng thứ bên trái, chứa biến của bạn, khác với thứ bên phải, không phải vậy. Trong !trường hợp này chỉ là một giữ chỗ nhân vật. Nó có thể là bất cứ điều gì. Nếu %1có nội dung, sau đó sự bình đẳng sẽ là sai lầm, nếu nó không bạn sẽ chỉ được so sánh !để !và nó sẽ thành sự thật.

!==!không phải là một toán tử, vì vậy viết "asdf" !==! "fdas"là khá vô nghĩa.

Gợi ý sử dụng if not "asdf" == "fdas"chắc chắn là cách để đi.


Cảm ơn jatrim .. Chắc chắn là hữu ích cho những người tìm kiếm câu trả lời, thay vì hỏi lại câu hỏi. Nó không giống như StackExchange khóa khả năng trả lời / nhận xét do tuổi của câu hỏi, vì vậy hãy nghĩ rằng điều này là hoàn toàn chấp nhận được.
dùng66001

4
Các !được sử dụng ở đây trong trường hợp %1là trống, do đó dẫn đến thử nghiệm !==!, đó là sự thật. Bạn có thể sử dụng %1.==.thay thế (hầu như bất kỳ nhân vật nào sẽ làm) - mục đích là để đảm bảo rằng cả hai mặt của bài kiểm tra đẳng thức đều có thứ gì đó để kiểm tra. Các !==!ký hiệu chắc chắn là KHÔNG một dấu hiệu không-bình đẳng. Tốt hơn gắn bó với if not ....
Goozak

22

Thử:

if not "asdf" == "fdas" echo asdf

Điều đó hoạt động với tôi trên Windows XP (Tôi gặp lỗi tương tự như bạn đối với mã bạn đã đăng).


4

NEQ thường được sử dụng cho các số và == thường được sử dụng để so sánh chuỗi.

Tôi không thể tìm thấy bất kỳ tài liệu nào đề cập đến một toán hạng bất đẳng thức cụ thể và tương đương để so sánh chuỗi (thay cho NEQ). Giải pháp sử dụng IF KHÔNG == có vẻ là cách tiếp cận hợp lý nhất. Tôi không thể nghĩ ngay đến một tình huống trong đó việc đánh giá các hoạt động trong một tệp bó sẽ gây ra sự cố hoặc hành vi không mong muốn khi áp dụng phương pháp so sánh IF KHÔNG == cho chuỗi.

Tôi ước tôi có thể cung cấp cái nhìn sâu sắc về cách hai hàm hoạt động khác nhau ở mức độ thấp hơn - sẽ phân tách các tệp bó riêng biệt (sử dụng NEQ và IF KHÔNG ==) cung cấp bất kỳ manh mối nào về các lệnh gọi API gốc (không chính thức) đang tận dụng?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.