배치 파일:하위 문자열이 (파일이 아닌) 문자열에 있는지 확인합니다.
배치 파일에 문자열이 있습니다.abcdefg
나는 확인하고 싶습니다.bcd
가 문자열에 있습니다.
안타깝게도 제가 찾은 모든 솔루션은 하위 문자열이 아닌 하위 문자열 파일을 검색하는 것 같습니다.
이것에 대한 쉬운 해결책이 있습니까?
예, 치환을 사용하여 원래 문자열을 확인할 수 있습니다.
if not x%str1:bcd=%==x%str1% echo It contains bcd
그%str1:bcd=%
비트가 a를 대체할 것입니다.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점의 방법(팍스 디아블로의 게시물을 참조한 것으로 생각됨)은 대소문자만 일치하므로 일치시킬 수 있는 모든 반복에 대해 모든 대소문자 변형을 별도로 확인해야 합니다.
(참 고통스럽군요!3글자만 있으면 검사를 완료하기 위해 9개의 다른 테스트를 의미합니다!)
또한 명령 출력, 루프의 변수 또는 배치/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.
존재감을 감지하는 경우 가장 쉬운 해결책은 다음과 같습니다.
SET STRING=F00BAH
SET SUBSTRING=F00
ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE TRUE) else (ECHO CASE FALSE)
이것은 Windows 명령의 출력을 부울 변수로 삭제하는 데 유용합니다.에코를 실행할 명령으로 바꾸기만 하면 됩니다.파이프를 사용하여 Findstr의 문자열을 함께 사용하여 문을 더욱 한정할 수도 있습니다.서비스 제어(SC.exe)용 E.G
SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)
여러 줄 텍스트로 표시되는 Windows 업데이트 서비스에 대한 SC 쿼리의 출력을 평가하고, "상태"가 포함된 줄을 찾은 다음 해당 줄에서 "실행 중"이라는 단어가 발생하는지 여부를 확인하고, 그에 따라 오류 수준을 설정합니다.
제가 이 답변에 대해 너무 늦게 답변을 드리겠지만, 수락된 답변은 "하드 코딩된 문자열"이 검색 문자열의 일부인지 확인하는 경우에만 작동합니다.
동적 검색의 경우 다음 작업을 수행해야 합니다.
SET searchString=abcd1234
SET key=cd123
CALL SET keyRemoved=%%searchString:%key%=%%
IF NOT "x%keyRemoved%"=="x%searchString%" (
ECHO Contains.
)
참고: 두 변수를 인수로 사용할 수 있습니다.
변수에서 텍스트를 찾는 방법, 예:
var_text="demo string test"
Echo.%var_text% | findstr /C:"test">nul && (
echo "found test"
) || Echo.%var_text% | findstr /C:"String">nul && (
echo "found String with S uppercase letter"
) || (
echo "Not Found "
)
범례:
&
and _this _that and this _this _this _this||
: 이 실행됩니다.&&
를 실행합니다. : IF_SUCCESSFUL이 됩니다.>nul
of command- findstr
/C:
검색 합니다.
저에게 가장 좋은 방법은 다음과 같습니다.
call :findInString "HelloWorld" "World"
:findInString
ECHO.%1 | FIND /I %2>Nul && (
Echo.Found
) || (
Echo.Not found
)
ECHO %String%| FINDSTR /C:"%Substring%" && (Instructions)
더 나은 답변은 다음과 같습니다.
set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains
파일에서 하위 문자열을 검색하는 솔루션은 문자열을 검색할 수도 있습니다. find
또는findstr
.
이 경우 간단한 해결책은 파일 이름을 제공하는 대신 명령어에 문자열을 연결하는 것입니다.
대소문자를 구분하는 문자열:
echo "abcdefg" | find "bcd"
문자열 대소문자 무시:
echo "abcdefg" | find /I "bcd"
일치하는 항목이 없으면 CMD에서 빈 줄 응답이 표시되고 %ERRORLEVEL%가 1로 설정됩니다.
@user839791의 답변을 기반으로 구축되었지만, 몇 가지를 더 추가했습니다.
@echo off
rem --Set variable below--
set var=condition
rem --Uncomment below line to display contents of variable--
::echo The variable is %var%
rem --Change condition to desired string below--
ECHO.%var%| FIND /I "condition">Nul && (
rem --Occurs if the string is found--
Echo.Variable is "condition"
color C
pause
) || (
rem --Occurs if the string isn't found--
Echo.Variable is not "condition"
color A
pause
)
예, 문자열에서 하위 문자열을 찾을 수 있습니다.
echo.%data% | FINDSTR /I "POS">Nul && (SET var=POS) || (SET noVar="variable not found")
echo.%data% | FINDSTR /I "TD1">Nul && (SET var=TD1) || (SET noVar="variable not found")
GOTO %var%
:POS
echo processes inside POS
GOTO END
:TD1
echo processes inside TD1
:END
언급URL : https://stackoverflow.com/questions/7005951/batch-file-find-if-substring-is-in-string-not-in-a-file
'programing' 카테고리의 다른 글
백그라운드 작업자를 사용하여 GUI를 업데이트하는 방법은 무엇입니까? (0) | 2023.05.15 |
---|---|
공식 Postgre의 구성 파일을 사용자 정의하는 방법SQL Docker 이미지? (0) | 2023.05.15 |
C# 인터페이스.암묵적 구현 대 명시적 구현 (0) | 2023.05.15 |
일부 파일만 커밋하려면 어떻게 해야 합니까? (0) | 2023.05.15 |
AWS 람다에 해당하는 Azure는 무엇입니까? (0) | 2023.05.15 |