запись параметра реестра с проверкой
Нужно внести данные в реестр с проверкой (по умолчанию 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
Он правильно написан?
|
zai, достаточно просто:
Код:
reg.exe add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f
— нет особого смысла проверять, если результатом в любом случае должна быть 1.
|
Цитата:
Цитата Iska
нет особого смысла проверять, если результатом в любом случае должна быть 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
|
Код:
@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
@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 »
|
т.к. он проще
|
Если Вы уверены, что там никогда не будет значений вида 0x10, 0x11, 0x12, 0x111 и т.п.
Только замените, наконец /f на /v в:
Цитата:
Цитата zai
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
|
Время: 11:04.
© OSzone.net 2001-