Windows 批处理比较区分大小写的字符串

dja*_*fan 3 windows cmd if-statement batch-file

我正在尝试在 DOS 批处理脚本中比较需要区分大小写的字符串。我无法弄清楚如何在 IF 语句中打开区分大小写。这是我正在做的事情,它也在小写“-f”上匹配,我试图避免:

SET "ARGS=%*"
IF "%ARGS:-F=%" NEQ "%ARGS%" (
  ECHO Pro option -F was found and not allowed.
  GOTO :ERROR
)
Run Code Online (Sandbox Code Playgroud)

小智 6

IF /I为简单起见使用……/I如果指定了开关,则表示进行不区分大小写的字符串比较。

SET "ARGS=%*"
IF /I "%ARGS:-F=%" NEQ "%ARGS%" (
  ECHO Pro option -F was found and not allowed.
  GOTO :ERROR
)
Run Code Online (Sandbox Code Playgroud)

此外,通常的做法是使用==而不是NEQ因为后者用于数值比较。

IE

IF %ERRORLEVEL% EQU 0 (ECHO.Ok.)
Run Code Online (Sandbox Code Playgroud)


dbe*_*ham 5

您的IF语句正确执行区分大小写的搜索。问题是,您的扩展搜索和替换已损坏,如Endoro指出,和正确的形式"!ARGS:-F=!"是大小写不敏感的。在扩展 ARGS 时,它首先查找-F,不考虑大小写,然后将其替换为空。

不幸的是,这就是搜索和替换的工作方式。没有办法让它区分大小写。

您可以使用以下内容进行区分大小写的测试:

echo(!ARGS!|find "-F" >nul && echo Pro option -F was found.
Run Code Online (Sandbox Code Playgroud)