批处理不相等(不相等)运算符

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

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

我做错了什么?

508355 次浏览

试一试

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

试一试:

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

这适用于我的Windows XP(我得到相同的错误,你张贴的代码)。

用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有内容,则相等值为假,如果没有,则只比较!!,则为真。

!==!不是一个操作符,所以写"asdf" !==! "fdas"是非常没有意义的。

使用if not "asdf" == "fdas"的建议绝对是正确的。

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

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

我希望我能提供洞察两个函数如何在较低的水平上表现不同-将分解单独的批处理文件(使用NEQ和IF NOT ==)提供任何线索(非正式文档)本地API调用conhost.exe正在使用?

我发现最简单的道路是:

IF %ERRORLEVEL% NEQ 0 Echo An error was found

IF %ERRORLEVEL% GRT 0 goto error1

运算符!==!没有正确的值,这意味着它只用于知道变量是否被设置。

IF !%1==! GOTO main