2016-08-10 17 views
1

문자열이 대문자인지 테스트하려고합니다.배치 findstr을 if 문과 함께 사용할 수 있습니까

@echo off 
setlocal enabledelayedexpansion 

set X=A 
set Y=a 

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

을하고 대문자가 아닌 경우이 하나의 errorlevel과 결과,하지만 난 그것을가 if 문을 사용하여처럼 echo 부분을 제외하고 대문자로되어 있는지 확인하고 싶습니다 :이 작동하는지 알고있다. 하지만 findstr을 사용하고 테스트 할 변수를 전달하는 방법을 모르므로 if 문에서 테스트 할 수 있습니다.

답변

3

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 
) 

모든 것이 한 줄에 넣어,하지만 난 괄호 가독성 여러 행을 사용할 수있다.

+0

고맙습니다. – jrwygal

0
@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 부분은 불가피 할 수 있습니다. 필자는 불필요한 정보를 에코하지 않도록 코드를 약간 수정합니다.

+0

정규식 '[AZ]'와''[az]'는 대소 문자를 각각 일치시켜야합니다 **, ** [**] ** [**] ** http://stackoverflow.com/q/8844868)'findstr'의 버그로 인해 제대로 작동하지 않습니다 ... – aschipfl

+0

감사합니다. 방금이 버그를 깨달았습니다. 대답이 수정되었습니다. – Pika

+0

아,'findstr'에 대한 메타 문자'+'가 없으므로'*'만 사용할 수 있습니다; one-or-more-matches 기능을 얻기 위해서는'?? *'(하나 또는 그 이상의'?'s를 의미)가 필요합니다 ... – aschipfl