PDA

Показать полную графическую версию : [решено] запись параметра реестра с проверкой


zai
21-06-2017, 19:10
Нужно внести данные в реестр с проверкой (по умолчанию 0):
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform]
"UserOperations"=dword:00000001

Сделал такой батник:
@echo off
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /f UserOperations /t REG_DWORD | find /i "0x1" && (goto exit) || (goto update_reg)
:update_reg
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f
goto exit
:exit

Он правильно написан?

Iska
21-06-2017, 19:20
zai, достаточно просто:
reg.exe add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f
— нет особого смысла проверять, если результатом в любом случае должна быть 1.

zai
21-06-2017, 19:32
нет особого смысла проверять, если результатом в любом случае должна быть 1 »
тогда батник будет постоянно перезаписывать данные реестра, а нужно что бы он не срабатывал.

Iska, а такой вариант не лучше будет?

@echo off
setlocal
set ProductName=Office14.STANDARD
IF NOT "%ProgramFiles(x86)%"=="" (goto amd64) else (goto x86)
:amd64
reg query HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\Microsoft\Windows\CurrentVersion\Uninstall\%ProductName%
if NOT %errorlevel%==1 (goto exit)
:x86
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%ProductName%
if %errorlevel%==1 (goto check_reg) else (goto exit)
:check_reg
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /f UserOperations /t REG_DWORD | find /i "0x1" && (goto exit) || (goto update_reg)
:update_reg
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f
goto exit
:exit
endlocal

Iska
21-06-2017, 20:02
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=1,3" %%i in (
`2^>nul reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" /v "UserOperations" /t REG_DWORD ^| find.exe /i "UserOperations"`
) do set /a i%%i = %%j

if defined iUserOperations (
if "%iUserOperations%" neq "1" call :AddParameterOrSetValue
) else (
call :AddParameterOrSetValue
)

endlocal
exit /b 0

:AddParameterOrSetValue
2>nul 1>&2 reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" /v "UserOperations" /t REG_DWORD /d 0x01 /f
exit /b

zai
21-06-2017, 22:28
Остановился на первом варианте:
@echo off
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /f UserOperations /t REG_DWORD | find /i "0x1" && (goto exit) || (goto update_reg)
:update_reg
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f
goto exit
:exit »

т.к. он проще

Iska
21-06-2017, 23:25
т.к. он проще »
Если Вы уверены, что там никогда не будет значений вида 0x10, 0x11, 0x12, 0x111 и т.п.

Только замените, наконец /f на /v в:
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /f UserOperations /t REG_DWORD | find /i "0x1" && (goto exit) || (goto update_reg) »
и можно проще:
2>nul reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" /v "UserOperations" /t REG_DWORD | find.exe /i "0x1" || 2>nul 1>&2 reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" /v "UserOperations" /t REG_DWORD /d 0x01 /f




© OSzone.net 2001-2012