Câu trả lời:
Thử
if NOT "asdf" == "fdas" echo asdf
Sử dụng NEQ thay thế.
if "asdf" NEQ "fdas" echo asdf
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 %1
có 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 sử dụng ở đây trong trường hợp %1
là 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 ...
.
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).
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?