根据this,
!==!
是不等于字符串运算符。
尝试一下,我得到:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
我做错了什么?
试试
if NOT "asdf" == "fdas" echo asdf
使用 NEQ 代替。
if "asdf" NEQ "fdas" echo asdf
我从您链接中的示例代码中提取了这个:
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"
的建议绝对是要走的路。
尝试:
if not "asdf" == "fdas" echo asdf
这在 Windows XP 上对我有用(对于您发布的代码,我遇到了与您相同的错误)。
NEQ 通常用于数字,== 通常用于字符串比较。
我找不到任何文档提到用于字符串比较的特定且等效的不等式操作数(代替 NEQ)。使用 IF NOT == 的解决方案似乎是最合理的方法。我无法立即想到在将 IF NOT == 比较方法应用于字符串时,批处理文件中的操作评估会导致问题或意外行为的情况。
我希望我能深入了解这两个函数在较低级别上的行为方式有何不同——反汇编单独的批处理文件(使用 NEQ 和 IF NOT ==)会提供关于哪些(非官方记录的)本机 API 调用 conhost 的任何线索。 exe 正在使用?
我发现的最简单的way是:
IF %ERRORLEVEL% NEQ 0 Echo An error was found
或
IF %ERRORLEVEL% GRT 0 goto error1
运算符!==!没有正确的值,这意味着它仅用于知道是否设置了变量。
IF !%1==! GOTO main
输入表3所示数字,显示给定字符串是否相等
输入号码1:5646
不相等
或者
输入号码1:78954
相等