Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - определить версию и разрядность windows и запустить команды

Ответить
Настройки темы
CMD/BAT - определить версию и разрядность windows и запустить команды

Новый участник


Сообщения: 7
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Karbid87
Дата: 16-02-2014
Необходимо определить сначала версию 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 и разрядность, но не пойму как передать значения. Помогите пожалуйста.

Отправлено: 12:02, 16-02-2014

 

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Собрал пока что такой батник
Код: Выделить весь код
@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 файлы не нужны были.

Отправлено: 14:57, 16-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Выкладываю другой вариант. Разрабатывал только на основе Windows 7 X86, поэтому на других системах могут быть сбои. Но сам принцип непорочен. Особо отмечу, что учёл Ваше пожелание:
Цитата Karbid87:
Хотелось бы чтобы всё содержимое прописать в этот батник и 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

Последний раз редактировалось Georgio, 17-02-2014 в 13:11.


Отправлено: 13:00, 17-02-2014 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - определить версию и разрядность windows и запустить команды

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как определить версию Windows из вне? warezhka84 Программное обеспечение Windows 8 14-11-2015 12:32
Разное - Как определить версию установленной Windows Dramadeur Microsoft Windows 8 и 8.1 9 21-09-2013 17:16
Использование - [решено] Не могу определить версию Windows по CID neky Лицензирование продуктов Microsoft 1 11-04-2012 11:15
Разное - [решено] Как определить последнюю версию Windows Live? Funtik123 Windows Live (архив) 4 23-05-2010 02:27
Разное - [решено] Как определить разрядность процессора? Lexolex Microsoft Windows 7 4 26-01-2010 18:55




 
Переход