Development Tip

배치 파일의 문자열 비교

yourdevel 2020. 12. 4. 20:59
반응형

배치 파일의 문자열 비교


배치 파일에서 공백과 특수 문자가있는 문자열을 어떻게 비교합니까?

나는 노력하고있다 :

if %DevEnvDir% == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

그러나 "현재 예기치 않은 파일입니다."라는 오류 메시지가 표시됩니다.

나는 시도했다 :

if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

그러나 "명령 구문이 올바르지 않습니다."라는 오류가 표시됩니다.

어떤 아이디어?


환경 변수를 따옴표로 묶으십시오 (한 것처럼).
if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
하지만 여는 괄호를 공백없이 두는 방식이 혼란 스럽습니다.

나를 위해 작동합니다 ...

C:\if "%gtk_basepath%" == "C:\Program Files\GtkSharp\2.12\" (echo yes)
yes

@ ajv-jsy의 답변은 대부분 작동하지만 @MarioVilas와 같은 문제가있었습니다. 비교할 문자열 중 하나에 큰 따옴표 ( ")가 포함되어 있으면 변수 확장시 오류가 발생합니다.

예:

@echo off
SetLocal

set Lhs="
set Rhs="

if "%Lhs%" == "%Rhs%" echo Equal

오류:

echo was unexpected at this time.

해결책:

지연된 확장 활성화 및 사용! 대신에 %.

@echo off
SetLocal EnableDelayedExpansion

set Lhs="
set Rhs="

if !Lhs! == !Rhs! echo Equal

:: Surrounding with double quotes also works but appears (is?) unnecessary.
if "!Lhs!" == "!Rhs!" echo Equal

나는이 기술을 사용하여 지금까지 그것을 깰 수 없었다. 빈 문자열과 내가 던진 모든 기호와 함께 작동합니다.

테스트:

@echo off
SetLocal EnableDelayedExpansion

:: Test empty string
set Lhs=
set Rhs=
echo Lhs: !Lhs! & echo Rhs: !Rhs!
if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
echo.

:: Test symbols
set Lhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
set Rhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
echo Lhs: !Lhs! & echo Rhs: !Rhs!
if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
echo.

해결책은 공간을 사용하지 마십시오!

IF "%DevEnvDir%"=="C:\" (

참고 URL : https://stackoverflow.com/questions/14954271/string-comparison-in-batch-file

반응형