Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] запись параметра реестра с проверкой (http://forum.oszone.net/showthread.php?t=327781)

zai 21-06-2017 19:10 2746502

запись параметра реестра с проверкой
 
Нужно внести данные в реестр с проверкой (по умолчанию 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 2746505

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 2746509

Цитата:

Цитата 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


Iska 21-06-2017 20:02 2746517

Код:

@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 2746550

Остановился на первом варианте:
Цитата:

Цитата 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 »

т.к. он проще

Iska 21-06-2017 23:25 2746561

Цитата:

Цитата zai
т.к. он проще »

Если Вы уверены, что там никогда не будет значений вида 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.

Время: 11:04.
© OSzone.net 2001-