2013-02-20 2 views
2

두 문자열이 변수 인 다른 문자열이 문자열에 포함되어 있는지 확인하고 싶습니다. 기본적으로는 this thread과 동일하지만 두 개의 변수가 있습니다. (이 변수는 FOR 루프 내에서 선언 된) 해당 솔루션을 취하고 !VAR1!!VAR2! 내 상황에 적용 나는 시도 :내 cmd 배치 파일의 문자열 변수에서 문자열 변수를 바꾸려면 어떻게해야합니까?

if not x!VAR1:!VAR2!=!==x!VAR1! ECHO It contains !VAR2! 

를 불행하게도 그것이 작동하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다. 또한 변수에 액세스 할 수 있도록 SETLOCAL EnableDelayedExpansion을 선언했습니다.

도움이 될 것입니다.

감사합니다.

답변

3

Aacini와 rojo가 보여 주었던 것처럼, 두 변수 (일반 내부 및 지연된 외부)에 대해 다른 확장을 사용해야합니다.

하지만 변수를 설정하는 코드 블록 내에서 IF를 실행하고있는 것일 수 있습니다. 이제 정상적인 확장 기능을 사용할 수 없습니다. 해결 방법은 내부 변수를 FOR 변수로 전송하는 것입니다.

(
    :: Some code that sets the value of var2 
    :: 
    for /f "delims=" %%A in ("!var2!") do if "!var1:%%A=!" neq "!var1!" echo It contains %%A 
) 
+0

입력 해 주셔서 감사합니다. IF가 실제로 변수를 설정하는 코드 블록 내에서 실행되기 때문에이 솔루션은 저에게 효과적이었습니다. – Andrew

4

문자열이 다른 문자열 내에 존재하는지 확인하면 if이 아닌 for 루프를 사용하고 싶습니다.

for /f "delims=" %%I in ('echo !VAR1! ^| findstr /i /c:"!VAR2!"') do (
    echo !VAR1! contains !VAR2! 
) 

이렇게하면 대소 문자를 구분하지 않고 일치하는 이점이 있습니다.


if 문을 유지하려면 중간 변수를 사용하여 혼동을 줄이십시오.

set vt=!VAR1:%VAR2%=! 
if x%vt%==x%VAR1% (
    echo %VAR1% remained the same after removing %VAR2%. %VAR1% did not contain %VAR2% 
) 
+0

가변 확장 검색 및 대소 문자는 항상 대소 문자를 구분하지 않습니다. FINDSTR은 대소 문자를 구분하거나 구분하지 않는 검색 옵션을 제공합니다. 대소 문자를 구분하지 않고 검색하는 경우 IF 방식을 선호합니다. 훨씬 빠릅니다. – dbenham

+0

FINDSTR을 사용할 때 FOR/F가 필요 없습니다. 또한'! VAR1! '에 줄 바꿈이 포함되어 있으면 현재 FOR/F가 여러 번 인쇄 될 수 있습니다. FOR/F를 사용한다면 [Patrick 's answer] (http://stackoverflow.com/a/14985463/1012053) – dbenham

3

이것은 제 의견으로는 가장 간단한 방법입니다. 찾을 수없는 경우에 대한

echo %VAR1% | find /i "%VAR2%" >nul && echo %VAR2% was found! 

||&&를 교체합니다.

+0

+1과 같이하는 것이 더 좋습니다. – rojo

4
if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2! 
+0

+1'neq'도 문자열로 작업한다는 것을 몰랐습니다. 시원한. – rojo

관련 문제