현재 특정 문자열이 포함되거나 이름이 지정된 모든 레지스트리 키를 삭제하기 위해 배치 파일 작업을하고 있습니다 (예 :이 작업의 위험성을 알고 있음). 몇 가지 문제가 있습니다."문자열"이 포함 된 모든 레지스트리 키를 일괄 처리로 삭제합니다.
내가 사용하려고 시도 된 코드는 :이 레지스트리의 매우 미리 정해진 영역에 대한 작동
@echo off
set "key=HKEY_LOCAL_MACHINE\SOFT-EXT"
set "search=string"
for /f "delims=" %%a in ('reg query "%key%" /s^| findstr "%search%"') do reg delete "%key%" /v "%%~a"
- 나에게 유일한 단점 내 스크립트가 전체 SOFTWARE
레지스트리 하이브를 구문 분석 할 필요가 있다는 것입니다 외부 드라이브에서로드됩니다. 현재 발생하는 상황은 스크립트가 약 20 초 동안 실행되고 명령 프롬프트에서 반환되지 않습니다. 그 다음, 줄 번호에 값이 증가하면서 FINDSTR: Line 50300 too long
을 포함하는 줄이 계속 표시됩니다. 몇 가지 간단한 독서를 통해 findstr
은 많은 데이터 바이트 만 관리 할 수 있으며이 레지스트리 하이브 (약 80-100MB)의 방대한 크기 때문에 분명히 오버로드되고 있다고 생각합니다. 가끔 문자열을 포함하는 레지스트리 키가 HKLM\SOFTWARE\Classes\CSID\{###-###-###}\Example
지명 할 수 있기 때문에
&&
들과
||
에 추가 쿼리를 가지고 루프에 대한 변경을 시도,이 문제를 해결하려면 DWORD는
Name
이고 데이터 값은
string
입니다.
배치 파일로 수행하고 싶은 작업을 수행 할 수있는 방법이 있습니까? 필자는 PowerShell을 사용하는 것이 가능하다고 믿습니다. 그러나 현재 작업하고있는 환경은 PowerShell 또는 VB 스크립팅을 지원하지 않습니다.
find 대신 findstr을 사용해보십시오. –
죄송합니다 - 실제로 코드에서 findstr입니다. 나는 잘못 입력했다. – John