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

时间:2013-06-10 19:38:06

标签: windows if-statement batch-file cmd

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

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

4 个答案:

答案 0 :(得分:4)

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

不幸的是,这就是搜索和替换的工作原理。没有方法可以区分大小写。

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

echo(!ARGS!|find "-F" >nul && echo Pro option -F was found.

答案 1 :(得分:4)

为简单起见,请使用IF /I ... /I开关(如果已指定)表示不区分大小写的字符串比较。

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

此外,通常的做法是使用==代替NEQ,因为后者用于数字比较。

IF %ERRORLEVEL% EQU 0 (ECHO.Ok.)

答案 2 :(得分:2)

请查看我的示例和输出(call <script> -F):

@echo off &setlocal 
SET "ARGS=%*"
echo "%ARGS%"
echo "%ARGS:-F=%"

"-F"
""

你的版本:

@echo off &setlocal enabledelayedexpansion
SET "ARGS=%*"
echo "%ARGS%"
echo "!%ARGS%:-F=!"

"-F"
"-F="

答案 3 :(得分:1)

IF "%args:-F=-F%"=="%args%" (ECHO no sign of -f) ELSE (echo -f detected)

应该适合你 - 它适合我!


有趣的结果。

这是我的测试程序:

@ECHO OFF
SETLOCAL
CALL :test something -f
CALL :test something -F
CALL :test -f
CALL :test -F
GOTO :eof
:test
ECHO testing %*
SET "args=%*"
IF "%args:-F=-F%"=="%args%" (ECHO no sign of -f) ELSE (echo -f detected)
GOTO :EOF

结果:

testing something -f
-f detected
testing something -F
no sign of -f
testing -f
-f detected
testing -F
no sign of -f

所以 - 对我有用。也许它依赖于版本。我正在使用W7 / 64。