回答:
代わりにNEQを使用してください。
if "asdf" NEQ "fdas" echo asdf
これはかなり古くなっていることは知っていますが、パーティーに遅れて来る人にとってはまだ役に立つかもしれません。(編集:これはまだトラフィックを取得しているため更新され、@ 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"
は間違いなく行く方法です。
!
場合にここで使用され%1
、従って試験で得られた、空で!==!
も同様です。%1.==.
代わりに使用できます(ほとんどすべての文字で可能です)—目的は、等価テストの両側でテストするものがあることを確認することです。!==!
表記は間違いありませ -等しくない記号。に固執するif not ...
。
NEQは通常、数値に使用され、==は通常、文字列の比較に使用されます。
(NEQの代わりに)文字列比較用の特定の同等の不等式オペランドについて言及しているドキュメントは見つかりません。IF NOT ==を使用するソリューションは、最も健全なアプローチのようです。IF NOT ==比較メソッドを文字列に適用したときに、バッチファイル内の操作の評価が問題または予期しない動作を引き起こす状況をすぐに考えることはできません。
2つの関数が下位レベルでどのように異なる動作をするかについての洞察を提供できればいいのですが-(非公式に文書化された)ネイティブAPI呼び出しconhost.exeに関する個別のバッチファイル(NEQとIF NOT ==を使用)を分解すると、手掛かりが得られます利用していますか?