Страница 1 из 1

Скрипт автоматический определяющий OC

Добавлено: Вс июн 06, 2010 04:40
HA3APET
Возникла надобность сделать автоматический запуск приложений с автоматическим определением ОС.
То есть если у нас ХР, то запускается одна программа, если Vista\7, то другая.
Наверное это будет выглядить как скрипт определяющий битность ОС

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

IF EXIST "%ProgramFiles(x86)%" (
  Start /Wait Program1.exe
) Else (
  Start /Wait Program2.exe
)
Но я не нашёл отличия в переменных средах между ХР и Vista\7
Есть у кого какие идеи?

Добавлено: Вс июн 06, 2010 09:02
MVV
Вообще, можно делать так:

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

ver|find "Windows XP">nul
if not errorlevel 1 (
	echo Windows XP
) else (
	echo Not Windows XP
)
То есть, запускаем команду отображения версии системы и передаем вывод команде поиска строки.

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

Добавлено: Вс июн 06, 2010 10:50
HA3APET
MVV, я в скриптах пока несилен, как использовать этот код для запуска той или иной программы при разных результатах данного кода?
Каков итоговый скрипт если у меня есть 2 программы:
Program1.exe запуск при XP
Program2.exe запуск при not ХР

Добавлено: Вс июн 06, 2010 17:08
MVV
Дык я ж написал свой код в том же стиле, что и твой, просто другое условие. Там же и запускать, где в твоем:

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

@echo off
ver|find "Windows XP">nul 
if not errorlevel 1 ( 
   start "" "Program1.exe"
) else ( 
   start "" "Program2.exe"
)
cls

Добавлено: Вс июн 06, 2010 20:02
Tol!k

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

@ver |find "Windows XP" >nul &&start "" "progXP.exe" ||start "" "prog7.exe"
Добавлено
Flasher писал(а):@echo off не помешает
OK

Добавлено: Вс июн 06, 2010 20:17
Flasher
@echo off не помешает
HA3APET
И чтобы было понятно(а то мало ли), это батник. Сохранить в cmd/bat.

Добавлено: Вс июн 06, 2010 20:50
Tol!k
Flasher писал(а):это батник. Сохранить в cmd/bat.
Уместится в кнопке

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

TOTALCMD#BAR#DATA
%comspec% /c
@ver |find "Windows XP" >nul &&start "" "progXP.exe" ||start "" "prog7.exe"
%COMMANDER_PATH%\WCMICONS.DLL,44
XP | 7

1
-1

Добавлено: Вс июн 06, 2010 21:08
MVV
Tol!k, жесть! Чего только мелкомягкие не придумали...
Даже не представляю, додумались ли они описать это в справке к какой-либо внутренней команде, и в какой могли бы...

Добавлено: Вс июн 06, 2010 21:27
Tol!k
> додумались ли они описать это
Хм, додумались: hh.exe %windir%\Help\ntcmds.chm::/ntcmds_shelloverview.htm

У приведённого кода есть "фича": если запуск progXP.exe завершится неудачей, будет запущена prog7.exe даже если ось не ХР.
Если это недопустимо, нужно сделать принудительный выход

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

@ver |find "Windows XP" >nul &&(start "" "progXP.exe" &exit) ||start "" "prog7.exe"

Добавлено: Вс июн 06, 2010 23:13
MVV
Действительно. Кто б мог подумать, что Windows Help полезен... Я нашел информацию в системной справке в статье "Общие сведения о командной оболочке", та самая статья из файла ntcmds.chm.

Но у такого способа обработки есть один тонкий момент. Если команда, указанная между && и ||, выполняется не успешно, то команда за || выполнена будет. То есть, система попытается выполнить обе. В данном примере этой командой является команда start, то есть, если первая команда start провалится, командный процессор выполнит вторую, которая по условию задачи не предназначена для текущей операционной системы.

Добавлено: Вс июн 06, 2010 23:27
Tol!k
Я нашел информацию в системной справке в статье "Общие сведения о командной оболочке", та самая статья из файла ntcmds.chm.
Если выполнить команду hh.exe %windir%\Help\ntcmds.chm::/ntcmds_shelloverview.htm на Windows XP, то попадёшь именно на эту статью.
Но у такого способа обработки есть один тонкий момент.
Дополнил предыдущий пост.
То есть, система попытается выполнить обе.
Попытка выполнения второй команды будет только в случае неудачного выполнения первой. Если первая команда выполнена успешно, попытки выполнения второй не будет.

Добавлено: Пн июн 07, 2010 04:51
HA3APET
MVV, во, теперь понятно. Спасибо большое.
Tol!k, спасибо, оба способа работают.