批处理 你可以将 findstr 与 if 语句一起使用吗

Batch Can you use findstr with an if statement

我正在尝试测试字符串是否为大写。我知道这行得通:

@echo off
setlocal enabledelayedexpansion

set X=A
set Y=a

echo !X!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$"
echo !errorlevel!
echo !Y!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$"
echo !errorlevel!

如果它不是大写,则结果 errorlevel 为 1,但我想知道它是否是没有 echo 部分的大写,例如使用 if 语句。但我不知道如何使用 findstr 并将其传递给一个变量进行测试,以便它可以得到 errorlevel 我可以在 if 语句中进行测试。

@echo off
setlocal enabledelayedexpansion

rem this bat only validates one character.

set Y=a

for /f "delims=" %%i in ('echo !Y!^|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$"') do set output=%%i

if [%output%]==[] (echo !Y! is lower case) else (echo !Y! is upper case)

rem Expected output: a is lower case

因为它正在使用 findstr.

findstr/?
Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

如果没有创建包含 [a-z] 的新文本文件,ECHO 部分可能是不可避免的。 我稍微修改了代码以避免回显不必要的信息。

您需要 ECHO,但不需要测试 ERRORLEVEL。您可以使用 && 来测试前面的命令是否失败,或者使用 || 来测试它是否失败。您还可以将 FINDSTR 重定向到 nul,因为您不需要查看输出。

@echo off
setlocal enabledelayedexpansion

set X=A
set Y=a

for %%V in (X Y) do echo(!%%V!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$" >nul && (
  echo !%%V! is all upper case
) || (
  echo !%%V! is not all upper case
)

所有内容都可以放在一行中,但为了便于阅读,我使用了括号和多行。