等しくないバッチ(不等)演算子


264

よれば、この!==!等しくない文字列演算子です。それを試して、私は得ます:

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

何が悪いのですか?

回答:



105

代わりにNEQを使用してください。

if "asdf" NEQ "fdas" echo asdf

37
これには、コマンド拡張機能をオンにする必要があります(デフォルトでは2000以降で有効になっていますが、システム全体またはcmd.exeのパラメーターとしてオフにすることができます)通常は、setlocalを使用してそれらをオンにする必要があります。 「もしそうでない場合」を使用するだけで、古きよきDOSの時代にさかのぼります
Anders

29

これはかなり古くなっていることは知っていますが、パーティーに遅れて来る人にとってはまだ役に立つかもしれません。(編集:これはまだトラフィックを取得しているため更新され、@ Goozakがコメントで指摘したように、サンプルの元の分析も正しくなかった。)

私はあなたのリンクのサンプルコードからこれを引き出しました:

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==!これは==、変数を含む左側のものと右側のものとが異なることを確認するための意図的な慣用的な使用法です。!このケースでは、単に文字のプレースホルダです。それは何でもかまいません。場合は%1、コンテンツを持っている、それはあなただけで比較することがありますしない場合は平等では、falseになります!!、それがtrueになります。

!==!は演算子ではないため、書き込み"asdf" !==! "fdas"は無意味です。

使用する提案if not "asdf" == "fdas"は間違いなく行く方法です。


ありがとうjatrim ..もう一度質問するのではなく、答えを探している人にとって最も間違いなく役に立ちます。StackExchangeは質問の古さのために回答/コメントする機能をロックオフするようなものではないので、これは完全に許容できると思います。
user66001 2013年

4
!場合にここで使用され%1、従って試験で得られた、空で!==!も同様です。%1.==.代わりに使用できます(ほとんどすべての文字で可能です)—目的は、等価テストの両側でテストするものがあることを確認することです。!==!表記は間違いありませ -等しくない記号。に固執するif not ...
Goozak 2013

22

試してください:

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

私はWindows XPで動作します(投稿したコードと同じエラーが表示されます)。


4

NEQは通常、数値に使用され、==は通常、文字列の比較に使用されます。

(NEQの代わりに)文字列比較用の特定の同等の不等式オペランドについて言及しているドキュメントは見つかりません。IF NOT ==を使用するソリューションは、最も健全なアプローチのようです。IF NOT ==比較メソッドを文字列に適用したときに、バッチファイル内の操作の評価が問題または予期しない動作を引き起こす状況をすぐに考えることはできません。

2つの関数が下位レベルでどのように異なる動作をするかについての洞察を提供できればいいのですが-(非公式に文書化された)ネイティブAPI呼び出しconhost.exeに関する個別のバッチファイル(NEQとIF NOT ==を使用)を分解すると、手掛かりが得られます利用していますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.