Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

.bat @ Windows

2.1K
18 июня 2006 года
FIRESTARTER
90 / / 29.05.2005
Такой-вот вопрос:
Можно-ли создать коммандный bat-скрипт,выполняющий такую операцию: Проверка,запущено ли приложение,и если нет,то запуск этого приложения.
405
20 июня 2006 года
Dmitrii
554 / / 16.12.2004
[QUOTE=FIRESTARTER]Можно-ли создать коммандный bat-скрипт,выполняющий такую операцию: Проверка,запущено ли приложение,и если нет,то запуск этого приложения.[/QUOTE]
Вот пара примеров сценариев.
1. Используются средства WMI и WSH:
Код:
Option Explicit
Dim wmiObj, proCollection, scrShell
Set wmiObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set proCollection = wmiObj.ExecQuery("Select * from Win32_Process Where Name = 'Calc.exe'")
If proCollection.Count = 0 Then
'    Wscript.Echo "Калькулятор не запущен."
    Set scrShell = CreateObject("WScript.Shell")
    scrShell.Run "Calc.exe", 1
'Else
'    Wscript.Echo "Калькулятор уже запущен."
End If


2. Используются средства только WSH:
 
Код:
Option Explicit
Dim scrShell, resAct
Set scrShell = CreateObject("WScript.Shell")
resAct = scrShell.AppActivate("Калькулятор")
If resAct = False Then
'    Wscript.Echo "Калькулятор не запущен."
    scrShell.Run "Calc.exe", 1
'Else
'    Wscript.Echo "Калькулятор уже запущен."
End If


В .bat-файле напишите: [color=blue]wscript.exe script.vbs[/color] (или [color=blue]cscript.exe script.vbs[/color]), где script.vbs - имя файла, содержащего нужный сценарий.

"Закомментированные" строки, разумеется, можно удалить. Они нужны лишь для отлатдки.

[color=red]Обратите внимание[/color] на то, что запрос WMI обращается к приложению по имени его исполняемого модуля ([color=blue]Name='Calc.exe'[/color]), а метод WSH .AppActivate - по заголовку окна ([color=blue].AppActivate("Калькулятор")[/color]).
2.1K
20 июня 2006 года
FIRESTARTER
90 / / 29.05.2005
Спасибо за помощь.
Ещё несколько вопросов:
А на машину дополнительно нужно что-либо устанавливать?
Это на Окнах2000 тоже будет работать?
А как выглядит команда "открыть файл в приложении"?
И наверное последний вопрос: Можно-ли из командного файла запустить программу так,чтобы окно не открывалось(типа демон),или лежало в трее?
405
21 июня 2006 года
Dmitrii
554 / / 16.12.2004
Цитата:
А на машину дополнительно нужно что-либо устанавливать?


Нет.

Цитата:
Это на Окнах2000 тоже будет работать?


Проверено на Windows 2000 Pro/XP Pro.

Цитата:
А как выглядит команда "открыть файл в приложении"?
Можно-ли из командного файла запустить программу так,чтобы окно не открывалось(типа демон),или лежало в трее?


Пример 1:

Код:
Option Explicit
Dim wmiObj, proCollection, scrShell, fsObj
Set wmiObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set proCollection = wmiObj.ExecQuery("Select * from Win32_Process Where Name = 'Notepad.exe'")
If proCollection.Count = 0 Then
    Set scrShell = CreateObject("WScript.Shell")
    Set fsObj = CreateObject("Scripting.FileSystemObject")
    If fsObj.FileExists("C:\Temp\text.txt") = True Then
        '---
        'Окно приложения не отображается вообще
        'scrShell.Run "Notepad.exe C:\Temp\text.txt", 0
        '---
        'Окно приложения отображается в виде значка на панели задач
        scrShell.Run "Notepad.exe C:\Temp\text.txt", 2
        '---
   End If
End If


Пример 2:
Код:
Option Explicit
Dim scrShell, resAct, fsObj
Set scrShell = CreateObject("WScript.Shell")
resAct = scrShell.AppActivate("text.txt - Блокнот")
If resAct = False Then
    Set fsObj = CreateObject("Scripting.FileSystemObject")
    If fsObj.FileExists("C:\Temp\text.txt") = True Then
        '---
        'Окно приложения не отображается вообще
        'scrShell.Run "Notepad.exe C:\Temp\text.txt", 0
        '---
        'Окно приложения отображается в виде значка на панели задач
        scrShell.Run "Notepad.exe C:\Temp\text.txt", 2
        '---
   End If
End If
[color=red]Обратите внимание[/color] на следующее:
- вариант с использованием WMI гарантирует то, что приложение будет запущено только один раз;
- вариант без использования WMI гарантирует лишь то, что приложение [color=blue]с указанным для открывания файлом[/color] будет запущено только один раз, но оно может быть уже запущено с другим файлом или без файла.
2.1K
20 апреля 2007 года
FIRESTARTER
90 / / 29.05.2005
 
Код:
"C:\Documents and Settings\USER\ђ Ў®зЁ© бв®«\MegaFon.lnk"
CD "D:\SOFT\Program Files\INTERNET\"
TOONEL\toonel.jar
Firefox\firefox.exe
pause
MIRANDA\miranda32.exe

Выполнение скрипта останавливается после выполнения строки 3. Не выдаётся каких либо ошибок/cooбщений,окно терминала остаётся открытым.
Следующая строка выполняется только после того,как закрыть приложение,запущенное скриптом.
Кракозябры в первой строке это "Рабочий стол" в DOS кодировке.
2.1K
24 апреля 2007 года
FIRESTARTER
90 / / 29.05.2005
Разобрался. правилно должно быть так:
 
Код:
"C:\Documents and Settings\USER\ђ Ў®зЁ© бв®«\MegaFon.lnk"
CD "D:\SOFT\Program Files\INTERNET\"
start TOONEL\toonel.jar
start FireFox\firefox.exe
pause
start MIRANDA\miranda32.exe

Почему-то Я не знал о команде "start". Cлучайно наткнулся на пример кода здесь.
309
25 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
Строку "c:\Documents and Settings\USER\ђ Ў®зЁ© бв®«" вполне можно заменить системной переменной %USERPROFILE%
344
28 апреля 2007 года
Delpher
493 / / 14.08.2005
Цитата: Dmitrii
.



респект, красиво расписал

2.1K
08 мая 2007 года
FIRESTARTER
90 / / 29.05.2005
Оказывается в Win не работает команда CHOICE! Ужас!
Есть ли возможность в командных файлах создать диалоговые запросы?
334
09 мая 2007 года
HexEdit
809 / / 27.07.2006
Ты пишешь для себя или на распространение?
2.1K
09 мая 2007 года
FIRESTARTER
90 / / 29.05.2005
Нет,для себя. Моя деятельность вообще не связана с программированием...
334
10 мая 2007 года
HexEdit
809 / / 27.07.2006
Ну тогда могу посоветовать 2 варианта:
  1. скопировать choice.exe(com) с установочного диска Win98(ME)
  2. переходить на MSH (Microsoft Command Shell, aka Monad)
22K
07 июня 2007 года
01MDM
49 / / 07.06.2007
Цитата: FIRESTARTER
Оказывается в Win не работает команда CHOICE! Ужас!
Есть ли возможность в командных файлах создать диалоговые запросы?



Можно через set /p

Код:
set /p a="choice 1, 2 or 3: "
if %a% equ 1 (
     run some code1
     goto next
)

if %a% equ 2 (
      run some code2
      goto next
)

if %a% equ 3 (
      run some code3
)

:next
2.1K
07 июня 2007 года
FIRESTARTER
90 / / 29.05.2005
Большое спасибо,то что надо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог