답변:
예, 대체를 사용하고 원래 문자열을 확인할 수 있습니다.
if not x%str1:bcd=%==x%str1% echo It contains bcd
%str1:bcd=%
비트는 대체됩니다 bcd
에 str1
원본과는 다른 만드는, 빈 문자열.
원본에 bcd
문자열이 포함되어 있지 않으면 수정 된 버전이 동일합니다.
다음 스크립트를 사용하여 테스트하면 실제로 표시됩니다.
@setlocal enableextensions enabledelayedexpansion
@echo off
set str1=%1
if not x%str1:bcd=%==x%str1% echo It contains bcd
endlocal
그리고 다양한 달리기의 결과 :
c:\testarea> testprog hello
c:\testarea> testprog abcdef
It contains bcd
c:\testarea> testprog bcd
It contains bcd
몇 가지 메모 :
if
문이 솔루션의 고기, 다른 모든 지원 물건입니다.x
평등의 양면 전에 문자열이 있는지 확인하는 것입니다 bcd
괜찮 작동합니다. 또한 특정 "부적절한"시작 문자로부터 보호합니다.소스 문자열을 파이프하고 findstr
값을 확인 ERRORLEVEL
하여 패턴 문자열이 있는지 확인할 수 있습니다. 값이 0이면 성공을 나타내며 패턴을 찾았습니다. 예를 들면 다음과 같습니다.
::
: Y.CMD - Test if pattern in string
: P1 - the pattern
: P2 - the string to check
::
@echo off
echo.%2 | findstr /C:"%1" 1>nul
if errorlevel 1 (
echo. got one - pattern not found
) ELSE (
echo. got zero - found pattern
)
이것이 CMD.EXE에서 실행될 때, 우리는 다음을 얻습니다.
C:\DemoDev>y pqrs "abc def pqr 123"
got one - pattern not found
C:\DemoDev>y pqr "abc def pqr 123"
got zero - found pattern
나는 보통 이런 식으로합니다 :
Echo.%1 | findstr /C:"%2">nul && (
REM TRUE
) || (
REM FALSE
)
예:
Echo.Hello world | findstr /C:"world">nul && (
Echo.TRUE
) || (
Echo.FALSE
)
Echo.Hello world | findstr /C:"World">nul && (Echo.TRUE) || (Echo.FALSE)
산출:
TRUE
FALSE
이것이 최선의 방법인지 모르겠습니다.
호환성과 사용 편의성을 위해 FIND를 사용하는 것이 좋습니다.
대소 문자를 구분하거나 대소 문자를 구분하지 않는지도 고려해야합니다.
78 포인트가있는 방법 (나는 paxdiablo의 게시물을 언급했다고 생각합니다)은 대소 문자를 구분하기 때문에 일치시킬 수있는 모든 반복에 대해 모든 사례 변형을 별도로 확인해야합니다.
(이 얼마나 아파요! 확인을 위해 9 가지 시험을 의미하는 3 글자 만!)
또한 명령 출력, 루프의 변수 또는 배치 / CMD의 포인터 변수 값을 일치시키지 않는 것이 여러 번 일치하는 것이 좋습니다.
이러한 이유로이 방법이 바람직한 대체 방법입니다.
사용 : [/ I] [/ V] "일치하는 문자"찾기
[/ I] (대소 문자 구분) [/ V] (문자를 포함하지 않아야 함)
한 줄로 :
ECHO.%Variable% | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
여러 줄 :
ECHO.%Variable%| FIND /I "ABC">Nul && (
Echo.Found "ABC"
) || (
Echo.Did not find "ABC"
)
언급했듯이 이것은 문자열 대체를 허용하는 변수가 아닌 것들에 좋습니다.
FOR %A IN (
"Some long string with Spaces does not contain the expected string"
oihu AljB
lojkAbCk
Something_Else
"Going to evaluate this entire string for ABC as well!"
) DO (
ECHO.%~A| FIND /I "ABC">Nul && (
Echo.Found "ABC" in "%A"
) || ( Echo.Did not find "ABC" )
)
Output From a command:
NLTest | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
As you can see this is the superior way to handle the check for multiple reasons.
setlocal EnableExtensions
다음 IF /I
대소 문자를 구분 비교를 할 수 있습니다.
존재 여부를 감지하는 경우 가장 쉬운 해결책은 다음과 같습니다.
SET STRING=F00BAH
SET SUBSTRING=F00
ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE TRUE) else (ECHO CASE FALSE)
이것은 Windows 명령의 출력을 부울 변수에 드롭하는 데 효과적입니다. echo를 실행하려는 명령으로 바꾸십시오. 파이프를 사용하여 명령문을 추가로 규정하기 위해 Findstr을 함께 묶을 수도 있습니다. 서비스 제어를위한 EG (SC.exe)
SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)
여러 줄 텍스트로 나오는 Windows Update 서비스에 대한 SC Query의 SC Query 출력을 평가하고 "state"가 포함 된 줄을 찾은 다음 "running"이라는 단어가 해당 줄에 있는지 확인한 다음 그에 따라 오류 수준을 설정합니다.
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
더 나은 답변은 여기에 있습니다 :
set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains
ECHO %String%| FINDSTR /C:"%Substring%" && (Instructions)
Windows
과cmd
또는 그것입니다ms-dos
. MSDOS는 오랫동안 Windows의 일부가 아니 었 습니다.