PDA

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


olga_maksi29
03-09-2022, 11:26
Доброе утро. Помогите горю горевать
Пытаюсь создать bat файл ( который будет хранится в сетевой папке ) с определённым, но простым назначением
1) Требуется что бы bat файл запускался с повышенными правами (c запросом UAC) или с запросом на повышения прав
но с этим относительно понятно .
2) Дальше определялась бы система по нескольким условиям:
если это Windows XP
- применить все reg файлы и bat файлы в папке с батником с директории WindowsXP
Windows 7 и выше (8/10/11 включительно)
- применить все reg файлы и bat файлы в папке с батником с директории Windows7+
Windows 8/8.1
- применить все reg файлы и bat файлы в папке с батником с директории Windows8+
Windows 10
- применить все reg файлы и bat файлы в папке с батником с директории Windows10
Windows 11
- применить все reg файлы и bat файлы в папке с батником с директории Windows11

определить разрядность системы (x64/x86 )( всё выше windows XP)
- применить все reg файлы и bat файлы в папке с батником с директории x64

разрядность системы (x86)
- применить все reg файлы и bat файлы в папке с батником с директории x86

Вроде всё просто

1) решение или bat конвертировать в exe и добавлять манифест или я читала о способе добавить в bat asInvoker
2) второй пункт у меня получается очень большим
Может кто сможет подсказать элегантное и простое решение.

olga_maksi29
05-09-2022, 10:42
Примерно у меня вот так вышло :)

@echo off
SETLOCAL
set __COMPAT_LAYER=RunAsHighest
set curr_OS=
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" ( If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86)
REM
ver | findstr /i "5\.1\." && (set curr_OS=WindowsXP& GOTO :NOTTESTEDWIN)
ver | findstr /i "6\.1\." > nul && (set curr_OS=Windows7+& GOTO :TESTEDWIN & GOTO :TESTEDOSX)
ver | findstr /i "6\.2\." > nul && (set curr_OS=Windows8+& GOTO :NOTTESTEDWIN & GOTO :TESTEDWIN& GOTO :TESTEDOSX)
ver | findstr /i "6\.3\." > nul && (set curr_OS=Windows8+& GOTO :NOTTESTEDWIN & GOTO :TESTEDWIN& GOTO :TESTEDOSX)
ver | findstr /i "10\.0\." > nul && (set curr_OS=Windows10& GOTO :NOTTESTEDWIN & GOTO :TESTEDWIN& GOTO :TESTEDOSX)
ver | findstr /i "11\.0\." > nul && (set curr_OS=Windows11& GOTO :NOTTESTEDWIN & GOTO :TESTEDWIN& GOTO :TESTEDOSX)
echo xOS
:NOTTESTEDWIN
for %%k in (%~dp0%curr_OS%\*.reg) do regedit.exe /s "%%~k"
for %%i in (%~dp0%curr_OS%\*.bat) do call "%%~i"
:TESTEDWIN
for %%k in (%~dp0Windows7+\*.reg) do regedit.exe /s "%%~k"
for %%i in (%~dp0Windows7+\*.bat) do call "%%~i"
:TESTEDOSX
for %%k in (%~dp0%xOS%\*.reg) do regedit.exe /s "%%~k"
for %%i in (%~dp0%xOS%\*.bat) do call "%%~i"
pause

DJ Mogarych
05-09-2022, 10:53
Вроде того (powershell):

#Requires -RunAsAdministrator

$os = gwmi win32_operatingsystem |select caption, osarchitecture

switch ($os.caption -replace '.*Windows (XP|[\d\.]+).*','$1') {
'XP'{
"применить все reg файлы и bat файлы в папке с батником с директории WindowsXP"
}
'7' {
"применить все reg файлы и bat файлы в папке с батником с директории Windows7+"
}
'8*' {
"применить все reg файлы и bat файлы в папке с батником с директории Windows7+"
"применить все reg файлы и bat файлы в папке с батником с директории Windows8+"
}
'10' {
"применить все reg файлы и bat файлы в папке с батником с директории Windows7+"
"применить все reg файлы и bat файлы в папке с батником с директории Windows10"
}
'11' {
"применить все reg файлы и bat файлы в папке с батником с директории Windows7+"
"применить все reg файлы и bat файлы в папке с батником с директории Windows11"
}
}

switch ($os.osarchitecture -replace '\D') {
'32' {
"применить все reg файлы и bat файлы в папке с батником с директории x86"
}
'64' {
"применить все reg файлы и bat файлы в папке с батником с директории x64"
}
}


Как именно "применить все reg файлы и bat файлы", не подскажу, но вряд ли это трудно сделать самому.




© OSzone.net 2001-2012