이 "종료"가 5 번 이상 나타나는 경우 감지 FINDSTR를 사용할 수있다 파일 내의 아무 곳이나. 필요한 모든 정보는 What are the undocumented features and limitations of the Windows FINDSTR command?에 포함되어 있지만 조금 까다 롭고 분명하지는 않습니다.
정규식 검색은 캐리지 리턴 및 줄 바꿈 문자를 포함한 모든 중간 문자가 적절한 문자 클래스 범위와 일치하는 한 여러 줄의 종료에 대한 여러 인스턴스와 일치 할 수 있습니다. 여기에 필요한 문자를 게시 할 수 없으므로 꺾쇠 괄호 안에 기호 표기법을 사용합니다.
다음 정규 표현식은 0xFF (십진수 255)를 제외한 모든 바이트 문자와 일치합니다. 두 범위가있는 문자 클래스 표현식과 중간에 0xFF의 틈새로 구성됩니다.
[<0x01>-<space><tab>-<0xEA>]
당신은 표현 [<0x01>-<0xFE>]
해야한다고 생각 수도 있지만 FINDSTR는 숫자 코드 값으로 문자를 대조하지 않기 때문에 문제가 해결되지 않습니다 FINDSTR 실패 (및 중단)를 0xFF가 포함 된 경우 것이기 때문에 차이는 중요하다 .그래서
어디서나 파일 내에서 다음과 같은 정규식 검색을 필요
Shutdown
의 5 개 이상의 인스턴스를 찾기 위해 :
Shutdown[<0x01>-<space><tab>-<0xEA>]*Shutdown[<0x01>-<space><tab>-<0xEA>]*Shutdown[<0x01>-<space><tab>-<0xEA>]*Shutdown[<0x01>-<space><tab>-<0xEA>]*Shutdown
0xEA을 (십진수 234) 문자는 확장 ASCII 문자 및 확장 된 ASCII입니다 FINDSTR 검색의 명령 행에 포함될 수 없습니다. 따라서 검색 문자열은 외부 파일에 저장해야하며 /G:file
옵션을 사용해야합니다.
다음은 첫 번째 인수로 검색 할 최소 Shutdown 인스턴스 수와 두 번째 인수로 검색 할 파일 이름을 사용하는 완전한 배치 스크립트입니다. 다시 나는 필요한 실제 문자 대신 꺽쇠 괄호 안에 기호 표기법을 사용합니다.
@echo off
set count=%1
set file=%2
setlocal enableDelayedExpansion
set "search="
for /l %%N in (1 1 %count%) do set "search=!search!Shutdown[<0x01>-<space><tab>-<0xEA>]*"
set "search=!search:~0,-9!"
echo(!search!>search.txt
findstr /rg:search.txt %file% >nul&&echo FOUND||echo NOT found
최대 지원 개수는 최대 정규식 문자열 길이로 제한됩니다. XP의 경우 최대 정규식 길이는 127이며, 7의 수와 동일합니다. Vista 및 Windows 7에서 최대 정규식 길이는 254 바이트이며 이는 15의 계산을 지원해야합니다. 그러나 Windows 7에서의 테스트는 최대 12. 추가 테스트에 따르면 최대 길이는 문자열 리터럴 및 문자 클래스의 수와 각각의 상대 배치에 따라 달라집니다. 하지만 정확한 공식을 찾을 수 없었습니다.
외부 파일을 사용하지 않으려는 경우 다음 정규 표현식이 거의 비슷합니다. 0xE0, 0xE2, 0xE3, 0xE4, 0xE5, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xED, 0xEE, 0xFF와 같은 확장 ASCII 16 진 코드를 제외한 모든 문자와 일치합니다.
Shutdown[<0x01>-<space><tab>-Z]*Shutdown[<0x01>-<space><tab>-Z]*Shutdown[<0x01>-<space><tab>-Z]*Shutdown[<0x01>-<space><tab>-Z]*Shutdown
그리고 여기에 전체 배치 스크립트입니다 :
[<0x01>-<space><tab>-Z]
전체 정규식 검색이 될 것
@echo off
setlocal enableDelayedExpansion
set count=%1
set file=%2
set "search="
for /l %%N in (1 1 %count%) do set "search=!search!Shutdown[<0x01>-<space><tab>-Z]*"
set "search=!search:~0,-9!"
findstr /rc:"!search!" %file% >nul&&echo FOUND||echo NOT found
OMG RLY는? Ok. 그래서 가변 수의'. * Shutdown. *'을 원한다면, 나는 주위를 돌아 다닐 필요가있을 것이다. – Arj
당신은 그것을 하나 가지고 있습니다. 평소처럼 - 반 - 어, 구현 - .BBKED 구현 ... – Magoo
난 그냥 코드를 시도하고 올바른 결과를 반환하지 않는 것 .. 그것은 문자열을 찾지 못했습니다 – Arj