rip*_*234 250 batch-file operators
根据这个,!==!就是不等于字符串操作.尝试一下,我得到:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
dem*_*key 100
请改用NEQ.
if "asdf" NEQ "fdas" echo asdf
Run Code Online (Sandbox Code Playgroud)
jat*_*rim 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
Run Code Online (Sandbox Code Playgroud)
!%1==!只是习惯==用来验证左边的东西,包含你的变量,与右边的东西不同,不是.在!这种情况下只是一个字符占位符.它可能是任何东西.如果%1有内容,那么平等将是假的,如果没有您只是在比较!到!,这将是真实的.
!==!不是一个操作员,所以写作"asdf" !==! "fdas"是非常荒谬的.
使用的建议if not "asdf" == "fdas"绝对是要走的路.
Dom*_*ger 22
尝试:
if not "asdf" == "fdas" echo asdf
Run Code Online (Sandbox Code Playgroud)
这对我在Windows XP上有效(我得到的错误与您发布的代码相同).
小智 5
NEQ 通常用于数字,而 == 通常用于字符串比较。
我找不到任何提及用于字符串比较的特定且等效的不等式操作数(代替 NEQ)的文档。使用 IF NOT == 的解决方案似乎是最合理的方法。我无法立即想到在将 IF NOT == 比较方法应用于字符串时,批处理文件中的操作评估会导致问题或意外行为的情况。
我希望我可以深入了解这两个函数在较低级别上的行为有何不同 - 反汇编单独的批处理文件(使用 NEQ 和 IF NOT ==)是否会提供有关哪些(非官方记录的)本机 API 调用 conhost.exe 的任何线索正在利用?