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


263

根据这个!==!就是不等于字符串操作。尝试一下,我得到:

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

我究竟做错了什么?

Answers:



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有内容,那么平等将是假的,如果它不您只是在比较!!,这将是真实的。

!==!不是运算符,所以写起来"asdf" !==! "fdas"很荒谬。

使用建议if not "asdf" == "fdas"绝对是必经之路。


谢谢jatrim ..对寻求答案的人绝对是最有用的,而不是再次提出问题。这并不像StackExchange会由于问题的年龄而锁定回答/评论的功能,因此认为这是完全可以接受的。
user66001 2013年

4
!这里使用的情况下%1是空的,从而导致在测试中!==!,这是真实的。您可以改%1.==.而使用(几乎所有字符都可以使用)–目的是确保相等性测试的两面都有要测试的东西。该!==!符号绝对不是一个不等号。最好坚持if not ...
Goozak 2013年


4

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.