2012-10-31 3 views
3

사용자가별로 참여하지 않는 다양한 프로그램을 제거하기 위해 배치 스크립트를 만들려고합니다. (그룹 A (Say, Chrome 및 Microsoft Office) 제거), 부분적으로 부분적으로 재미와 연습을 위해. 이 자체는 불가능하지 않습니다. 이미 msiexec를 호출하고이를 레지스트리의 제거 위치 (msiexec/x {xxxxx-xxxxx-xxxxxx-xxxx})로 지정하여이 작업을 수행 할 수 있습니다.레지스트리 키 값을 찾을 때 문제가 발생했습니다.

유일한 문제는 프로그램이 레지스트리 키를 변경할 때마다 업데이트가 자주 발생하므로 경로를 다시 찾아야한다는 것입니다. 그래서, HKLM \ SOFTWARE \ Mincrosoft \ Windows \ CurrentVersion \ Uninstall 레지스트리 위치를 검색 할 코드 조각을 실행하려고합니다. 그리고 DisplayName이 반드시 정확한 값을 반환하지 않을 때마다 ("Chrome"이라고 말함) 레지스트리 위치를 저장합니까? ({xxxxxxx-xxxxxxx-xxxxxxx-xxxxxx}에 넣을 부분).

이렇게하면 프로그램은 변수를 사용하여 제거 할 수 있도록 프로그램을 찾고 위치를 저장합니다. 나는 시도했지만, 내가 아는 한 모든 쿼리를 사용하여 전체 위치가 필요하다. reg query HKLM/f를 사용하면 결과가 반환되지 않습니다. 나는 다양한 대안을 시도했지만 아무 것도 효과가없는 것으로 보인다. 여기

내 코드의 기본 버전입니다 (나는 그것의 대부분이 반복되기 때문에 전체 버전을 게시 무시하고있다. 그것은 대부분의 경우 다음 문이고 단지 사건)

@echo off 
:start 
echo Hello 
echo. 
1: Uninstall Chrome 

set /p choice="Enter Choice: " 
if "%choice%"=="1" goto uninstall_chrome 

:uninstall_chrome 
reg query HKLM /f Chrome /t REG_SZ 
::msiexec /x{uninstall location for the program} 

감사합니다.

:: 업데이트 :

알아 냈습니다. Rob van der Woude의 코드 중 일부를 사용하여 지금 할 수 있습니다. 이렇게하는 코드는 다음과 같습니다

CALL :Uninstall "Program Name" 

:Uninstall 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F "tokens=* %%A IN ('REG QUERY HKLM\SOFWARE\Microsoft\Windows\CurrentVersion\Uninstall /F "%~1" /D /S 2^>NUL ^| FINDSTR /R /B /C:"HKEY_"') DO (
REG QUERY "%%~A" /F DisplayName /V /E | FINDSTR /R /I /C:" DisplayName .* .*%~1" >NUL 2>&1 
FOR /F "tokens=2*" %%B IN ('REG QUERY "%%~A" /F DisplayName /V /E 2^>NUL ^| FIND /I " DisplayName "') DO ECHO Program Name = %%C 
FOR /F "tokens=7 delims=\" %%B IN ("%%~A") DO ECHO Unique Identifier = %%B 
FOR /F "tokens=2*" %%B IN ('REG QUERY "%%~A" /F UninstallString /V /E ^| FIND /I " UninstallString "') DO %%C /qb 
) 
ENDLOCAL 

이 출력됩니다 프로그램 이름과 고유 식별자는 다음 사용자 입력없이 프로그램을 제거

답변

1

내가 생각 ("당신은 X를 제거 하시겠습니까?") 아웃. Rob van der Woude의 코드 중 일부를 사용하여 지금 할 수 있습니다. 이렇게하는 코드는 다음과 같습니다

CALL :Uninstall "Program Name" 

:Uninstall 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F "tokens=* %%A IN ('REG QUERY HKLM\SOFWARE\Microsoft\Windows\CurrentVersion\Uninstall /F "%~1" /D /S 2^>NUL ^| FINDSTR /R /B /C:"HKEY_"') DO (
REG QUERY "%%~A" /F DisplayName /V /E | FINDSTR /R /I /C:" DisplayName .* .*%~1" >NUL 2>&1 
FOR /F "tokens=2*" %%B IN ('REG QUERY "%%~A" /F DisplayName /V /E 2^>NUL ^| FIND /I " DisplayName "') DO ECHO Program Name = %%C 
FOR /F "tokens=7 delims=\" %%B IN ("%%~A") DO ECHO Unique Identifier = %%B 
FOR /F "tokens=2*" %%B IN ('REG QUERY "%%~A" /F UninstallString /V /E ^| FIND /I " UninstallString "') DO %%C /qb 
) 
ENDLOCAL 

이 출력됩니다 프로그램 이름과 고유 식별자는 다음 사용자 입력없이 프로그램을 제거

("당신은 X를 제거 하시겠습니까?")
관련 문제