批处理 你可以将 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
)
所有内容都可以放在一行中,但为了便于阅读,我使用了括号和多行。
我正在尝试测试字符串是否为大写。我知道这行得通:
@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
)
所有内容都可以放在一行中,但为了便于阅读,我使用了括号和多行。