Скрипт автоматический определяющий OC
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Скрипт автоматический определяющий OC Author: HA3APET PostPosted: Sun Jun 06, 2010 04:40
    —
Возникла надобность сделать автоматический запуск приложений с автоматическим определением ОС.
То есть если у нас ХР, то запускается одна программа, если Vista\7, то другая.
Наверное это будет выглядить как скрипт определяющий битность ОС
Code:
IF EXIST "%ProgramFiles(x86)%" (
  Start /Wait Program1.exe
) Else (
  Start /Wait Program2.exe
)

Но я не нашёл отличия в переменных средах между ХР и Vista\7
Есть у кого какие идеи?

#2:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jun 06, 2010 09:02
    —
Вообще, можно делать так:
Code:
ver|find "Windows XP">nul
if not errorlevel 1 (
   echo Windows XP
) else (
   echo Not Windows XP
)

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

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

#3:  Author: HA3APET PostPosted: Sun Jun 06, 2010 10:50
    —
MVV, я в скриптах пока несилен, как использовать этот код для запуска той или иной программы при разных результатах данного кода?
Каков итоговый скрипт если у меня есть 2 программы:
Program1.exe запуск при XP
Program2.exe запуск при not ХР

#4:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jun 06, 2010 17:08
    —
Дык я ж написал свой код в том же стиле, что и твой, просто другое условие. Там же и запускать, где в твоем:
Code:
@echo off
ver|find "Windows XP">nul
if not errorlevel 1 (
   start "" "Program1.exe"
) else (
   start "" "Program2.exe"
)
cls

#5:  Author: Tol!kLocation: Арзамас PostPosted: Sun Jun 06, 2010 20:02
    —
Code:
@ver |find "Windows XP" >nul &&start "" "progXP.exe" ||start "" "prog7.exe"


Добавлено
Flasher wrote:
@echo off не помешает

OK


Last edited by Tol!k on Sun Jun 06, 2010 20:32; edited 1 time in total

#6:  Author: FlasherLocation: Москва PostPosted: Sun Jun 06, 2010 20:17
    —
@echo off не помешает
HA3APET
И чтобы было понятно(а то мало ли), это батник. Сохранить в cmd/bat.

#7:  Author: Tol!kLocation: Арзамас PostPosted: Sun Jun 06, 2010 20:50
    —
Flasher wrote:
это батник. Сохранить в cmd/bat.
Уместится в кнопке
Code:
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

#8:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jun 06, 2010 21:08
    —
Tol!k, жесть! Чего только мелкомягкие не придумали...
Даже не представляю, додумались ли они описать это в справке к какой-либо внутренней команде, и в какой могли бы...

#9:  Author: Tol!kLocation: Арзамас PostPosted: Sun Jun 06, 2010 21:27
    —
> додумались ли они описать это
Хм, додумались: hh.exe %windir%\Help\ntcmds.chm::/ntcmds_shelloverview.htm

У приведённого кода есть "фича": если запуск progXP.exe завершится неудачей, будет запущена prog7.exe даже если ось не ХР.
Если это недопустимо, нужно сделать принудительный выход
Code:
@ver |find "Windows XP" >nul &&(start "" "progXP.exe" &exit) ||start "" "prog7.exe"


Last edited by Tol!k on Sun Jun 06, 2010 23:20; edited 1 time in total

#10:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jun 06, 2010 23:13
    —
Действительно. Кто б мог подумать, что Windows Help полезен... Я нашел информацию в системной справке в статье "Общие сведения о командной оболочке", та самая статья из файла ntcmds.chm.

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

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

#12:  Author: HA3APET PostPosted: Mon Jun 07, 2010 04:51
    —
MVV, во, теперь понятно. Спасибо большое.
Tol!k, спасибо, оба способа работают.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group