web-dev-qa-db-ja.com

バッチ不等号(不等式)演算子

this によると、!==!は等しくない文字列演算子です。試してみると、

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

何がおかしいのですか?

236
ripper234

やってみる

if NOT "asdf" == "fdas" echo asdf
450
Frank Bollack

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

if "asdf" NEQ "fdas" echo asdf
93
demoncodemonkey

私はこれがかなり時代遅れであることを知っています、しかしこれはパーティーに遅刻する人たちにとってまだ役に立つかもしれません。 (編集:これはまだトラフィックを得ているので更新され、@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が内容を持っていれば同等性は偽になります、そうでなければ!!と比較するだけで真実になります。

!==!は演算子ではないので、"asdf" !==! "fdas"を書くことはあまり意味がありません。

if not "asdf" == "fdas"を使用するという提案は、間違いなく有効な方法です。

28
jatrim

試してください:

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

それは私にとってWindows XP上で動作します(私はあなたが投稿したコードに対してあなたと同じエラーになります)。

21
Dominic Rodger

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

(NEQの代わりに)文字列比較のための具体的かつ同等の不等式オペランドに言及している文書はありません。 IF NOT ==を使用した解決策が最も確実な方法のようです。 IF NOT ==比較メソッドを文字列に適用したときに、バッチファイル内の操作の評価が問題または予期しない動作を引き起こす可能性があるという状況をすぐには考えることができません。

2つの関数が低レベルでどのように異なる動作をするかについての洞察を提供できればと思います - (非公式に文書化されている)ネイティブAPIがconhost.exeを呼び出すという手がかりを提供します。利用している?

0
Paul