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

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Ответить
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

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

Сообщение HA3APET »

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

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

IF EXIST "%ProgramFiles(x86)%" (
  Start /Wait Program1.exe
) Else (
  Start /Wait Program2.exe
)
Но я не нашёл отличия в переменных средах между ХР и Vista\7
Есть у кого какие идеи?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вообще, можно делать так:

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

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

Строку, в которой будет производиться поиск, всегда можно получить, набрав в консоли любой винды просто команду ver.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV, я в скриптах пока несилен, как использовать этот код для запуска той или иной программы при разных результатах данного кода?
Каков итоговый скрипт если у меня есть 2 программы:
Program1.exe запуск при XP
Program2.exe запуск при not ХР
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Дык я ж написал свой код в том же стиле, что и твой, просто другое условие. Там же и запускать, где в твоем:

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

@echo off
ver|find "Windows XP">nul 
if not errorlevel 1 ( 
   start "" "Program1.exe"
) else ( 
   start "" "Program2.exe"
)
cls
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

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

@ver |find "Windows XP" >nul &&start "" "progXP.exe" ||start "" "prog7.exe"
Добавлено
Flasher писал(а):@echo off не помешает
OK
Последний раз редактировалось Tol!k Вс июн 06, 2010 20:32, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

@echo off не помешает
HA3APET
И чтобы было понятно(а то мало ли), это батник. Сохранить в cmd/bat.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение 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
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Tol!k, жесть! Чего только мелкомягкие не придумали...
Даже не представляю, додумались ли они описать это в справке к какой-либо внутренней команде, и в какой могли бы...
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение 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"
Последний раз редактировалось Tol!k Вс июн 06, 2010 23:20, всего редактировалось 1 раз.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Но у такого способа обработки есть один тонкий момент. Если команда, указанная между && и ||, выполняется не успешно, то команда за || выполнена будет. То есть, система попытается выполнить обе. В данном примере этой командой является команда start, то есть, если первая команда start провалится, командный процессор выполнит вторую, которая по условию задачи не предназначена для текущей операционной системы.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Я нашел информацию в системной справке в статье "Общие сведения о командной оболочке", та самая статья из файла ntcmds.chm.
Если выполнить команду hh.exe %windir%\Help\ntcmds.chm::/ntcmds_shelloverview.htm на Windows XP, то попадёшь именно на эту статью.
Но у такого способа обработки есть один тонкий момент.
Дополнил предыдущий пост.
То есть, система попытается выполнить обе.
Попытка выполнения второй команды будет только в случае неудачного выполнения первой. Если первая команда выполнена успешно, попытки выполнения второй не будет.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV, во, теперь понятно. Спасибо большое.
Tol!k, спасибо, оба способа работают.
Ответить