
У меня есть список ключей/значений/записей реестра, которые я хотел бы удалить (в основном список в #3 ниже без REG DELETE). Он работает как есть, но я хотел бы иметь пакет...
I. Записать сам listfile.txt, если list.txt не существует в %~dp0
set "ListFile=%TEMP%\ListFile.txt"
set "List=%~dp0list.txt"
if not exist "%List%" (
(
echo Some regisrtry key
echo Some registry value
echo Some registry subkey
echo No idea how it should all be written like
) >"%ListFile%"
)
II. Проверьте наличие каждого в списке с помощью REG QUERY и получите ERRORLEVEL
Если он существует..
- REG EXPORT в его собственный действительный .reg (который можно импортировать обратно, если что-то пойдет не так).
for /f %%A in (%src%) do (
if not exist "%bkp%\%%A" md "%bkp%\%%A"
reg export "%%A" "%bkp%\%%A\key.reg"
Я не уверен, будет ли вышеприведенное работать с конкретными значениями или со всеми записями в указанном ключе.
сравните список и .reg
если совпадает, выполните REG DELETE /f или REG DELETE /v /f или REG DELETE /va /f в зависимости от ситуации.
REG DELETE "HKCU\Software\Google\Chrome" /f
REG DELETE "HKLM\Software\Google\Chrome" /f
REG DELETE "HKCU\Software\Policies\Google\Chrome" /f
REG DELETE "HKLM\Software\Policies\Google\Chrome" /f
REG DELETE "HKLM\Software\Policies\Google\Update" /f
REG DELETE "HKLM\Software\WOW6432Node\Google\Enrollment" /f
REG DELETE "HKLM\Software\WOW6432Node\Google\Update\ClientState\{430FD4D0-B729-4F61-AA34-91526481799D}" /v CloudManagementEnrollmentToken /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Policies" /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKCU\Software\Microsoft\WindowsSelfHost" /f
REG DELETE "HKLM\Software\Microsoft\WindowsSelfHost" /f
REG DELETE "HKLM\Software\Microsoft\Policies" /f
REG DELETE "HKCU\Software\Policies" /f
REG DELETE "HKLM\Software\Policies" /f
REG DELETE "HKLM\Software\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /f
REG DELETE "HKLM\Software\Policies\Microsoft\Edge" /va /f
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" /f
- ECHO в cmd и %~dp0output.log, что ключи/значения/записи были обработаны и удалены
Если его не существует..
- ECHO в cmd и %~dp0output.log, что он не существует
"HKCU\Software\Google\Chrome" key does not exist
No entries can be found in "HKLM\Software\Policies\Microsoft\Edge"
Value DisableAntiSpyware cannot be found in "HKLM\Software\Policies\Microsoft\Windows Defender"
III. Удалить список, созданный пакетом, но не удалять его, если он уже существовал.
IF EXIST "%ListFile%" ( DEL "%ListFile%" ) ELSE ( goto :eof )
Я попытался изменить найденные фрагменты, но пока не понимаю, как вообще работают циклы for, а также таким образом, чтобы у меня был только один список, а цикл for адаптировался в зависимости от того, является ли он ключом, значением (/v) и/или требует обработки только всех записей в указанном ключе (/va).
Текущий скрипт ниже работает до сих пор, но не хватает всех пунктов выше. Любая помощь в их добавлении приветствуется.
REG DELETE "HKCU\Software\Google\Chrome" /f
REG DELETE "HKLM\Software\Google\Chrome" /f
REG DELETE "HKCU\Software\Policies\Google\Chrome" /f
REG DELETE "HKLM\Software\Policies\Google\Chrome" /f
REG DELETE "HKLM\Software\Policies\Google\Update" /f
REG DELETE "HKLM\Software\WOW6432Node\Google\Enrollment" /f
REG DELETE "HKLM\Software\WOW6432Node\Google\Update\ClientState\{430FD4D0-B729-4F61-AA34-91526481799D}" /v CloudManagementEnrollmentToken /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Policies" /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies" /f
REG DELETE "HKCU\Software\Microsoft\WindowsSelfHost" /f
REG DELETE "HKLM\Software\Microsoft\WindowsSelfHost" /f
REG DELETE "HKLM\Software\Microsoft\Policies" /f
REG DELETE "HKCU\Software\Policies" /f
REG DELETE "HKLM\Software\Policies" /f
REG DELETE "HKLM\Software\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /f
REG DELETE "HKLM\Software\Policies\Microsoft\Edge" /va /f
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" /f
REG DELETE "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" /f
@RD /S /Q "%ProgramFiles(x86)%\Google\Policies"
@RD /S /Q "%WinDir%\System32\GroupPolicy"
@RD /S /Q "%WinDir%\System32\GroupPolicyUsers"
ECHO.
gpupdate /force
ECHO.
ECHO Complete. Will shutdown..
pause>nul
shutdown.exe /r /t 00
EXIT /B 0
решение1
@echo off
for /f usebackq^tokens^=1-3*delims^=^" %%i in =;(
`type "%~f0" ^| findstr /b \^"`
);= do if "%%~l" == "" 2>nul =;(
reg query "%%~i" >nul && =;(
reg export "%%~i" "%%~k.reg" /y
reg delete "%%~i" /f
);= || echo/Key not exist "%%~i"
);= else if "%%~l" == "/va" 2>nul =;(
reg query "%%~i" >nul && =;(
reg export "%%~i" "%%~k.reg" /y
reg delete "%%~i" /va /f
);= || echo/Key not exist "%%~i"
);= else 2>nul =;(
reg query "%%~i" >nul && =;(
reg export "%%~i" "%%~l.reg" /y
reg delete "%%~i" /v "%%~j" /f
);= || echo/Key not exist "%%~i"
);=
>nul 2>&1 rd /s /q "%ProgramFiles(x86)%\Google\Policies" "%Windir%\System32\GroupPolicy" "%Windir%\System32\GroupPolicyUsers"
echo/ & gpupdate /force | findstr .
timeout -1 | echo/Complete. Will shutdown!..
echo/ & shutdown.exe /r /t 00
exit /b 0 || goto :eof
::--------------------------------------------------------------::
:: Your listing of registry keys/values/entries ::
::--------------------------------------------------------------::
"HKCU\Software\Policies" "HKCU_Policies"
"HKCU\Software\Google\Chrome" "HKCU_Chrome"
"HKCU\Software\Policies\Google\Chrome" "HKCU_Google_Chrome"
"HKCU\Software\Microsoft\WindowsSelfHost" "HKCU_Microsoft_WindowsSelfHost"
"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies" "HKCU_Microsoft_Policies"
"HKLM\Software\Policies" "HKLM_Policies"
"HKLM\Software\Google\Chrome" "HKLM_Chrome"
"HKLM\Software\Microsoft\Policies" "HKLM_Microsoft_Policies"
"HKLM\Software\Policies\Google\Chrome" "HKLM_Google_Chrome"
"HKLM\Software\Policies\Google\Update" "HKLM_Google_Update"
"HKLM\Software\Microsoft\WindowsSelfHost" "HKLM_Microsoft_WindowsSelfHost"
"HKLM\Software\Policies\Microsoft\Edge" "HKLM_Edge" /va
"HKLM\Software\Microsoft\Windows\CurrentVersion\Policies" "HKLM_CurrentVersion_Policies"
"HKLM\Software\Policies\Microsoft\Windows Defender" "HKLM_Windows_Defender" "DisableAntiSpyware"
"HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" "HKLM_WindowsStore_WindowsUpdate"
"HKLM\Software\WOW6432Node\Google\Enrollment" "HKLM_WOW6432Node_Google_Enrollment"
"HKLM\Software\WOW6432Node\Microsoft\Policies" "HKLM_WOW6432Node_Microsoft_Policies"
"HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" "HKLM_WOW6432Node_CurrentVersion_Policies"
"HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" "HKLM_WOW6432Node_WindowsStore_WindowsUpdate"
"HKLM\Software\WOW6432Node\Google\Update\ClientState\{430FD4D0-B729-4F61-AA34-91526481799D}" "HKLM_WOW6432Node_Google_Update_ClientState" "CloudManagementEnrollmentToken"
1.Используйте пакетное хранилище для создания списка ключей и имен (уникальных) в files.reg
2.Используйте For /F
цикл для поиска/фильтрации ключей
3.Выберите работу с «кавычками» в качестве разделителя в этом For /F
цикле
4.В команде цикла отфильтруйте строки, начинающиеся с"
(цитата) с:
for ...(' type "%~f0" ^|findstr /b \^" ')do...
5.Используйте вхождения значения (нулевое, равное или отличное) в %%l
для if
обработки каждого случая
6.Использование &&
оператора для reg query
успешного выполнения сообщает, существует ли ключ/значение в реестре
6.Использование &&
оператора для reg query
успешного выполнения сообщает, существует ли ключ/значение в реестре
Наблюдение 1:Вы можете удалить несколько папок одной командой:
rd /q /s "FOLDER_01" "FOLDER_02" "FOLDER_nn"
rmdir /q /s "FOLDER_01" "FOLDER_02" "FOLDER_nn"
Наблюдение 2:Вы можете удалить папку, которая не существует, это не возвращает ядерную космическую ошибку, а только предупреждение о том, что"система не может найти", поэтому вы можете просто опустить возможное простое текстовое сообщение при удалении папки, существует она или нет, и это даже не прервет выполнение вашего bat-файла:
2>nul rmdir /q /s "FOLDER_01" "FOLDER_02" "FOLDER_nn"
if exist "FOLDER_01" rd /q /s "FOLDER_01"
if exist "FOLDER_02" rd /q /s "FOLDER_02"
if exist "FOLDER_nn" rd /q /s "FOLDER_nn"
Наблюдение 3:То же самое относится и к команде удаления:
2>nul del /q "FILE_01" "FILE_02" "FILE_nn"
if exist "FILE_01" del /q "FILE_01"
if exist "FILE_02" del /q "FILE_02"
if exist "FILE_nn" del /q "FILE_nn"
Дополнительные ресурсы: