2012-01-06 3 views
18

$ 1이라는 변수에 텍스트가 있습니다. 이제 $ 1에 특정 문자열이 포함되어 있는지 확인하고 싶습니다. 특정 문자열이 포함되어 있으면 메시지를 인쇄하고 싶습니다. 인쇄는 문제가 아니며, 문제는 수표 ... 어떻게 할 수 있습니까?배치 파일에서 부분 문자열의 문자열을 검사하십시오 (Windows)?

+1

여기에서 시작하십시오 : http://www.dostips.com/DtTipsStringManipulation.php –

+0

고마워요! doesnt는 진짜로 돕는다 ... 나는 somethiing가 더 쉽게 희망하고 있었다. 다른 아이디어? – EOB

답변

2

내가 아는 한 cmd.exe에는 직접 질문에 대답하는 기본 제공 기능이 없습니다. 그러나 대체 작업을 지원합니다. 트릭은 $ 1에서 빈 문자열로 존재를 테스트하는 데 필요한 하위 문자열을 대체 한 다음 $ 1이 변경되었는지 확인합니다. 그런 다음 을 수행하면에 하위 문자열이 포함됩니다 (그렇지 않으면 바꾸기 작업이 처음부터 바뀌지 않을 것입니다). 아래 코드를 참조하십시오 :

set longString=the variable contating (or not containing) some text 

@rem replace xxxxxx with the string you are looking for 
set tempStr=%longString:xxxxxx=% 

if "%longString%"=="%tempStr%" goto notFound 
echo Substring found! 
goto end 

:notFound 
echo Substring not found 

:end 
+1

주 -이 유형의 검색은 대소 문자를 구분하지 않습니다. 또한 특수 문자에 문제가있을 수 있습니다. 검색/대체 및 평등 확인에 지연 확장을 사용하면 더욱 강력합니다. 하지만 검색 문자열은'='char을 포함 할 수 없으며 검색 문자열은'~'또는'*'로 시작할 수 없습니다. – dbenham

+0

@dbenham : 절대적으로 공정한 발언이지만, 내 솔루션은 완벽하지 않습니다 (비록 cmd 구문이 그렇듯이). –

9

SET 검색 및 바꾸기는 대부분의 경우 작동하지만 대소 문자를 구분하거나 정규 표현식 검색을 지원하지 않습니다.

대/소문자 구분 검색이나 제한된 정규식 지원이 필요한 경우 FINDSTR을 사용할 수 있습니다.

특수 문자를 이스케이프하는 문제를 피하려면 검색 문자열이 변수에 있고 검색 및 대상이 지연된 확장을 통해 액세스되는 것이 가장 좋습니다.

ECHO 명령을 사용하여 $ 1을 FINDSTR 명령에 파이프 할 수 있습니다. $ 1이 정의되지 않은 경우에 ECHO(을 사용하고 여분의 공백을 추가하지 않도록주의하십시오. ECHO !$1!은 $ 1이 정의되지 않은 경우 ECHO is off. (또는 on)을 반향 출력하는 반면, 정의되지 않은 경우 ECHO(!$1!은 빈 행을 반향합니다.

FINDSTR은 검색 문자열을 찾으면 $ 1을 표시합니다. 출력을 nul로 리디렉션하지 않으려면 원하지 않습니다. FINDSTR은 검색 문자열이 발견되면 ERRORLEVEL을 0으로, 발견되지 않으면 ERRORLEVEL을 1로 설정합니다. 문자열이 있는지 확인하는 데 사용됩니다. &&||은 일치 (ERRORLEVEL 0) 또는 일치하지 않음 (ERRORLEVEL 0이 아님)을 테스트하는 데 편리한 구문입니다.

일반 표현식 지원은 기본이지만 여전히 유용합니다.

FINDSTR /?를 참조하십시오. 더 많은 정보를 위해서.

이 정규식 예제는 문자열 시작 부분에 "BEGIN", 중간에 "MID", 끝 부분에 "END"를 $ 1 검색합니다. 검색은 기본적으로 대소 문자를 구분합니다.

set "search=^BEGIN.*MID.*END$" 
setlocal enableDelayedExpansion 
echo(!$1!|findstr /r /c:"!search!" >nul && (
    echo FOUND 
    rem any commands can go here 
) || (
    echo NOT FOUND 
    rem any commands can go here 
) 
16

제 생각에 가장 쉬운 방법은 이것이다 :

set YourString=This is a test 

If NOT "%YourString%"=="%YourString:test=%" (
    echo Yes 
) else (
    echo No 
) 

Basiclly 후 문자열 ''당신이 문자열을 찾고 있습니다 그리고 당신이 만약 때문에 % 문자열이 아닌 뿅 사용하고 있습니다 : * %는 *을 문자열에서 제거하여 동일하지 않게합니다.

+2

[Igor 's answer] (http://stackoverflow.com/a/8757658/1012053)와 마찬가지로이 테스트는 대소 문자를 무시합니다. 또한 지연된 확장을 사용하는 것이 더 안전합니다. 마지막으로, 부분 문자열에'='가 포함되어 있으면 사용할 수 없습니다. – dbenham

관련 문제