批次不等于(不等)运算符

时间:2009-09-14 13:07:53

标签: batch-file operators

根据this!==!是不等的字符串运算符。 尝试一下,我明白了:

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

我做错了什么?

5 个答案:

答案 0 :(得分:446)

尝试

if NOT "asdf" == "fdas" echo asdf

答案 1 :(得分:93)

改用NEQ。

if "asdf" NEQ "fdas" echo asdf

答案 2 :(得分:28)

我知道这已经过时了,但对于那些迟到的人来说,这可能仍然有用。 (编辑:更新,因为这仍然得到流量和@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,如果不是,则您只是将!!进行比较,这将是真的。

!==!不是运算符,因此编写"asdf" !==! "fdas"非常荒谬。

使用if not "asdf" == "fdas"的建议绝对是可行的方法。

答案 3 :(得分:21)

尝试:

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

在Windows XP上对我有用(我发布的代码与您发布的代码相同)。

答案 4 :(得分:0)

NEQ通常用于数字,==通常用于字符串比较。

我找不到任何文档提及用于字符串比较的特定且等效的不等式操作数(代替NEQ)。使用IF NOT ==的解决方案似乎是最合理的方法。我无法立即想到在将IF NOT ==比较方法应用于字符串时批处理文件中的操作的评估会导致问题或意外行为的情况。

我希望我能深入了解这两个函数在较低级别上的行为方式-分解单独的批处理文件(使用NEQ和IF NOT ==)可以提供有关哪些(非正式记录的)本地API调用的线索conhost.exe正在利用?