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.