Toplu eşit olmayan (eşitsizlik) operatörü


263

Göre bu , !==!değil-eşit dize operatörüdür. Deniyorum, anladım:

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

Neyi yanlış yapıyorum?

Yanıtlar:



105

Bunun yerine NEQ kullanın.

if "asdf" NEQ "fdas" echo asdf

37
bu, komut uzantılarının açık olmasını gerektirir (Varsayılan olarak 2000+ sürümündedir, ancak sistem çapında veya cmd.exe parametresi olarak kapatılabilir) Normalde bunları setlocal ile açmalısınız, ancak eşit değilse, basit bir test için, sadece "değilse" kullanın, eski güzel DOS günlere geri döner
Anders

29

Bunun oldukça güncel olmadığını biliyorum, ama yine de partiye geç gelenler için yararlı olabilir. (EDIT: bu hala trafik aldığı için güncellendi ve @Goozak yorumlarda orijinal örnek analizimin de yanlış olduğuna dikkat çekti.)

Bunu bağlantınızdaki örnek koddan aldım:

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==!basitçe ==, değişkeninizi içeren soldaki şeyin, sağdaki şeyden farklı olduğunu doğrulama amaçlı, deyimsel bir kullanımıdır . !Bu durumda sadece bir karakter tutucudur. Herhangi bir şey olabilir. Eğer %1içeriğine sahiptir, o zaman sadece karşılaştırmış olursunuz yoksa eşitlik, yanlış olacaktır !etmek !ve doğru olacaktır.

!==!bir operatör değil, bu yüzden yazmak "asdf" !==! "fdas"oldukça saçma.

Kullanmak için öneri if not "asdf" == "fdas"kesinlikle gitmek için bir yoldur.


Teşekkürler jatrim .. Kesinlikle tekrar sormak yerine, bir cevap arayanlar için kesinlikle yararlı. StackExchange, soruların yaşı nedeniyle cevaplama / yorum yapma yeteneğini kilitlemez, bu yüzden bunun tamamen kabul edilebilir olduğunu düşünün.
user66001

4
!Diye burada kullanıldığı %1ve böylece test sonuçlanan boş !==!geçerlidir. Bunun %1.==.yerine kullanabilirsiniz (neredeyse her karakter yapardı) - amaç, eşitlik testinin her iki tarafının da test edilecek bir şey olduğundan emin olmaktır . !==!Notasyonu kesinlikle DEĞİL a-eşit değildir işareti. Daha iyi yapışır if not ....
Goozak

22

Deneyin:

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

Windows XP'de benim için çalışıyor (Gönderdiğiniz kod için sizinle aynı hatayı alıyorum).


4

NEQ genellikle sayılar için kullanılır ve == genellikle dize karşılaştırması için kullanılır.

Dize karşılaştırması için (NEQ yerine) belirli ve eşdeğer bir eşitsizlik işlenenden bahseden herhangi bir belge bulamıyorum. IF NOT == kullanan çözüm en sağlam yaklaşım gibi görünüyor. Ben hemen bir toplu iş dosyasında işlemlerin değerlendirilmesi bir sorun veya beklenmeyen bir davranış neden IF NOT == karşılaştırma yöntemi dizeleri uygularken neden bir durum düşünemiyorum.

Keşke iki fonksiyon nasıl daha düşük bir düzeyde farklı davranır hakkında bir fikir sunabilir - ayrı toplu dosyaları (NEQ ve IF NOT == kullanan) yerel API API (conhost.exe çağırır) açısından herhangi bir ipucu teklif sökülmesi istiyorsunuz kullanıyor mu?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.