배치 파일 : 하위 문자열이 문자열이 아닌 파일인지 확인하십시오.
배치 파일에는 string이 abcdefg
있습니다. bcd
문자열 에 있는지 확인하고 싶습니다 .
불행히도 찾은 모든 솔루션 은 하위 문자열의 문자열이 아닌 하위 문자열 의 파일 을 검색합니다 .
이것에 대한 쉬운 해결책이 있습니까?
예, 대체를 사용하고 원래 문자열을 확인할 수 있습니다.
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를 사용하는 것이 좋습니다.
대소 문자를 구분하거나 대소 문자를 구분하지 않는지도 고려해야합니다.
The method with 78 points (I believe I was referring to paxdiablo's post) will only match Case Sensitively, so you must put a separate check for every case variation for every possible iteration you may want to match.
( What a pain! At only 3 letters that means 9 different tests in order to accomplish the check! )
In addition, many times it is preferable to match command output, a variable in a loop, or the value of a pointer variable in your batch/CMD which is not as straight forward.
For these reasons this is a preferable alternative methodology:
Use: Find [/I] [/V] "Characters to Match"
[/I] (case Insensitive) [/V] (Must NOT contain the characters)
As Single Line:
ECHO.%Variable% | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
Multi-line:
ECHO.%Variable%| FIND /I "ABC">Nul && (
Echo.Found "ABC"
) || (
Echo.Did not find "ABC"
)
As mentioned this is great for things which are not in variables which allow string substitution as well:
FOR %A IN (oihu AljB lojkAbCk) DO ( ECHO.%~A| FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( 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.
If you are detecting for presence, here's the easiest solution:
SET STRING=F00BAH
SET SUBSTRING=F00
ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE TRUE) else (ECHO CASE FALSE)
This works great for dropping the output of windows commands into a boolean variable. Just replace the echo with the command you want to run. You can also string Findstr's together to further qualify a statement using pipes. E.G. for Service Control (SC.exe)
SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)
That one evaluates the output of SC Query for windows update services which comes out as a multiline text, finds the line containing "state" then finds if the word "running" occurs on that line, and sets the errorlevel accordingly.
Better answer was here:
set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains
I'm probably coming a bit too late with this answer, but the accepted answer only works for checking whether a "hard-coded string" is a part of the search string.
For dynamic search, you would have to do this:
SET searchString=abcd1234
SET key=cd123
CALL SET keyRemoved=%%searchString:%key%=%%
IF NOT "x%keyRemoved%"=="x%searchString%" (
ECHO Contains.
)
Note: You can take the two variables as arguments.
ECHO %String%| FINDSTR /C:"%Substring%" && (Instructions)
참고URL : https://stackoverflow.com/questions/7005951/batch-file-find-if-substring-is-in-string-not-in-a-file
'development' 카테고리의 다른 글
"exportAs"가 "ngForm"으로 설정된 지시문이 없습니다. (0) | 2020.05.15 |
---|---|
split (“|”)을 사용하여 파이프 기호로 Java 문자열 분할 (0) | 2020.05.14 |
자식으로 분기를 다운로드하는 방법은 무엇입니까? (0) | 2020.05.14 |
배열의 시작 부분으로 요소를 푸시하는 가장 쉬운 방법은 무엇입니까? (0) | 2020.05.14 |
파이썬 콘솔에 파일을 어떻게로드합니까? (0) | 2020.05.14 |