Войти

Показать полную графическую версию : определить версию и разрядность windows и запустить команды


Karbid87
16-02-2014, 12:02
Необходимо определить сначала версию Windows (XP, Vista, 7, 8), затем определить разрядность (x86(32) или x64), затем в этом же bat файле в соответствии с версией и разрядностью выполнить набор команд по добавлению сведений в реестр.
Команды по добавлению в реестр выглядят так:

win7-x32
[HKEY_LOCAL_MACHINE\SOFTWARE\1111\2222]
"DataFolder"="значение"
"SetupLog"="значение"
"Version"="значение"
"SetupVersion"=значение
"ProgramFolder"="значение"
"SetupFolder"="значение"
"RegData"=hex:значение
"Registration"=hex:значение
"Patches"=hex(7):значение

win7-x64
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\1111\2222]
"DataFolder"="значение"
"SetupLog"="значение"
"Version"="значение"
"SetupVersion"=значение
"ProgramFolder"="значение"
"SetupFolder"="значение"
"RegData"=hex:значение2
"Registration"=hex:значение2
"Patches"=hex(7):значение2

Для других систем всё похоже. Только отличаются значения "RegData","Registration","Patches".

Можно ли полностью автоматизировать добавление данных в реестр с помощью одного bat файла?
Если напишите, буду очень благодарен.
P.S. Изучал тут на форуме как определить версию Windows и разрядность, но не пойму как передать значения. Помогите пожалуйста.

Karbid87
16-02-2014, 14:57
Собрал пока что такой батник
@Echo Off
Set Tip=UNKNOWN
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 7" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win7
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 8" >nul
If "%ERRORLEVEL%"=="0" Set Tip=Win8

Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86

Echo %%xOS%% - %xOS%
Echo %%Tip%% - %Tip%

If %Tip%==UNKNOWN Exit

start REGEDIT %~dp0%Tip%-%xOS%.reg

Pause
Он запускает соответствующий reg файл, который лежит рядом с батником. Хотелось бы чтобы всё содержимое прописать в этот батник и reg файлы не нужны были.

Georgio
17-02-2014, 13:00
Выкладываю другой вариант. Разрабатывал только на основе Windows 7 X86, поэтому на других системах могут быть сбои. Но сам принцип непорочен. Особо отмечу, что учёл Ваше пожелание:Хотелось бы чтобы всё содержимое прописать в этот батник и reg файлы не нужны были », -- и эту часть кода смело можно вставить в Ваш пакетный файл.


@echo off
for /f "tokens=*" %%i in ('systeminfo 2^>nul') do (
echo %%i|>nul findstr Windows&& set OS=%%i
)||(
echo %%i|>nul findstr /rc:"X[68][46]\-based PC"&& set Arch=%%i&& goto:#
)
:#
for %%i in (
XP
Vista
7
8
) do (
set OS|>nul findstr /c:"Windows %%i"&& set OS=Windows %%i
)
==if defined OS (
echo %OS%
) else (
exit /b
)
set Arch|>nul findstr 64&& set Arch=X64
set Arch|>nul findstr 86&& set Arch=X86
echo %Arch%
chcp 1251>nul
(
echo Windows Registry Editor Version 5.00
echo.
==if %Arch%==X64 (
echo [HKLM\SOFTWARE\Wow6432Node\1111\2222]
) else (
echo [HKLM\SOFTWARE\1111\2222]
)
for %%i in (
""DataFolder"="значение""
""SetupLog"="значение""
""Version"="значение""
""SetupVersion"="значение""
""ProgramFolder"="значение""
""SetupFolder"="значение""
) do (
echo %%~i
)
for /f "tokens=1* delims=*" %%i in ('
findstr /bc:^"%OS% %Arch%^" ^"%~f0^"
') do (
echo %%j
)
)>tmp.reg
echo reg import tmp.reg
echo del tmp.reg
pause>nul
exit /b

###############################################

Windows XP X64 *"RegData"=hex:значение 1
Windows XP X64 *"Registration"=hex:значение 1
Windows XP X64 *"Patches"=hex(7):значение 1

Windows XP X86 *"RegData"=hex:значение 2
Windows XP X86 *"Registration"=hex:значение 2
Windows XP X86 *"Patches"=hex(7):значение 2

Windows Vista X64 *"RegData"=hex:значение 3
Windows Vista X64 *"Registration"=hex:значение 3
Windows Vista X64 *"Patches"=hex(7):значение 3

Windows Vista X86 *"RegData"=hex:значение 4
Windows Vista X86 *"Registration"=hex:значение 4
Windows Vista X86 *"Patches"=hex(7):значение 4

Windows 7 X64 *"RegData"=hex:значение 5
Windows 7 X64 *"Registration"=hex:значение 5
Windows 7 X64 *"Patches"=hex(7):значение 5

Windows 7 X86 *"RegData"=hex:значение 6
Windows 7 X86 *"Registration"=hex:значение 6
Windows 7 X86 *"Patches"=hex(7):значение 6

Windows 8 X64 *"RegData"=hex:значение 7
Windows 8 X64 *"Registration"=hex:значение 7
Windows 8 X64 *"Patches"=hex(7):значение 7

Windows 8 X86 *"RegData"=hex:значение 8
Windows 8 X86 *"Registration"=hex:значение 8
Windows 8 X86 *"Patches"=hex(7):значение 8


Если значения в "hex" и "hex(7)" будут расположены в несколько строк, то префикс надо добавлять к каждой строке, учитывая пробелы в её начале, например:
Windows 7 X86 *"RegData"=hex:a4,00,00,00,03,00,00,00,30,30,33,34,32,2d,4f,45,4d,2d,\
Windows 7 X86 * 38,39,39,32,37,35,32,2d,33,30,30,31,33,00,b2,00,00,00,58,31,35,2d,33,39,32,\
Windows 7 X86 * 37,35,00,00,00,00,00,00,00,35,b6,40,90,2e,72,ef,2f,c9,b3,68,d1,11,76,02,00,\
Windows 7 X86 * 00,00,00,00,58,60,5a,4d,96,66,d6,51,02,00,00,00,00,00,00,00,00,00,00,00,00,\
Windows 7 X86 * 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
Windows 7 X86 * 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
Windows 7 X86 * 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,68,23,f2,11.


Для "боевого применения" уберите "echo " из команд:

echo reg import tmp.reg
echo del tmp.reg




© OSzone.net 2001-2012