如何验证批处理文件中的变量是否等于其他变量或 Windows 变量?

如何验证批处理文件中的变量是否等于其他变量或 Windows 变量?

我正在制作一个只有特定用户可以使用的“锁定”批处理文件,因此我现在正在做的是检查写入的内容user==其他%username%变量的条件,如下所示:

if /i "%Nom%" == %UserName% Goto :Next2

%Nom%是用户写的。
我尝试了多种方法,但找不到办法。

答案1

看:

if /i  "?"  ==  "?"  ( true ) else ( false ) // return condition True
if /i  "?"  ==   ?   ( true ) else ( false ) // return condition False
if /i  [?]  ==  [?]  ( true ) else ( false ) // return condition True
if /i  [?]  ==  "?"  ( true ) else ( false ) // return condition False
if /i  [?]  ==  [?]  ( true ) else ( false ) // return condition True
if /i "[?]" == ["?"] ( true ) else ( false ) // return condition False
if /i "{?}" == "{?}" ( true ) else ( false ) // return condition True
if /i "/?/" ==  /?/  ( true ) else ( false ) // return condition False
if /i  \?\  ==  \?\  ( true ) else ( false ) // return condition True
if /i  /?/  == "/?/" ( true ) else ( false ) // return condition False

这将始终返回False比较条件"string" 等于 string,因为在比较中双引号是字符串的组成部分,将与引号整体进行比较。

请注意,引号不构成任何转义和/或命令的补充if,而是在执行中作为被比较的一部分,因此,在ifif /iif Not之后的所有内容ìf /i not始终将是与在相等之后的内容进行比较的对象,无论是否有""、 和/或[]{}等......


因此,您正在使用:

if /i   "?"   ==       ?      ... 
if /i "%Nom%" == "%UserName%" Goto :Next2 

附言1: "Something Inside Double Quotes"相比Something Outside Double Quotes,它应该是:"Something Inside Double Quotes"相比"Something Inside Double Quotes"


附言2:为了数值比较(的integers), 使用:

if integer EQU integer ...
if    1    EQU    1    ...
 
                EQU : Equal
                NEQ : Not equal

                LSS : Less than <
                LEQ : Less than or Equal <=

                GTR : Greater than >
                GEQ : Greater than or equal >=

                This 3 digit syntax is necessary because the > and <
                symbols are recognised as redirection operators
IF will only parse numbers when one of (EQU, NEQ, LSS, LEQ, GTR, GEQ) is used.
The == comparison operator always results in a string comparison.
  • 来源:

相关内容