据此,!==!是不等于字符串操作符。 试了一下,我明白了:

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

我做错了什么?


Try

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

Try:

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

or

IF %ERRORLEVEL% GRT 0 goto error1

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

IF !%1==! GOTO main