CMD/BAT - [решено] запись параметра реестра с проверкой

Ответить
Аватара пользователя
zai

CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение zai »

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

Re: CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение Iska »

zai, достаточно просто:



Код:

Код: Выделить всё

reg.exe add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v UserOperations /t REG_DWORD /d 1 /f

— нет особого смысла проверять, если результатом в любом случае должна быть 1.
Аватара пользователя
zai

Re: CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение zai »

Цитата Iska:



нет особого смысла проверять, если результатом в любом случае должна быть 1
CMD/BAT - [решено] запись параметра реестра с проверкой




тогда батник будет постоянно перезаписывать данные реестра, а нужно что бы он не срабатывал.



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

Re: CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение Iska »

Код:

Код: Выделить всё

@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

Re: CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение zai »

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


Цитата 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
CMD/BAT - [решено] запись параметра реестра с проверкой




т.к. он проще
Аватара пользователя
Iska

Re: CMD/BAT - [решено] запись параметра реестра с проверкой

Сообщение Iska »

Цитата zai:



т.к. он проще
CMD/BAT - [решено] запись параметра реестра с проверкой




Если Вы уверены, что там никогда не будет значений вида 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)
CMD/BAT - [решено] запись параметра реестра с проверкой




и можно проще:



Код:

Код: Выделить всё

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»