PDA

Просмотр полной версии : Создание bat-файла


SoaT
22.09.2008, 12:42
Помогите, кто разбирается, создать bat-файл для запуска WarCraft'а.
Алгоритм такой:
Монтирование вирт.диска
"C:\Program Files\Alcohol Soft\Alcohol 120\AxCmd.exe" E: /M:"C:\Games\Warcraft\Virtual\WarCraft III.mds"
Запуск WarRan'а
C:\Games\Warcraft\WarRun\WarRun.exe
Запуск wl3.exe
C:\Games\Warcraft\w3l.exe
w3l запускает war3.exe, только как-то странно. Как не выяснял.
Ожидание окончания war3.exe
Закрытие WarRun'а
taskkill /IM "WarRun.exe"Если бы знать как выполнить 4-ый пункт... :unsure:
Так же было бы интересно, можно ли вытаскивать данные из реестра и потом использовать их?

Fafnir
22.09.2008, 13:33
обязательно bat? Не осилит, боюсь.
Погляди VBasic и Windows Scripting Host.

SoaT
23.09.2008, 00:09
Да из меня кодер не кудышный ;) Таже в таких простых случаях. Думал мб есть какая-нибуть команда.

Slava
23.09.2008, 00:24
? SoaT ?, можно для таких целей заюзать Daemon Script (http://forum.battlefox.ru/showthread.php?p=75364#post75364)
еще и размонтировать образ в конце можна :)

И это вроде уже обсуждалось ;)
http://forum.battlefox.ru/showthread.php?p=249026#post249026

bmp
23.09.2008, 10:08
Ξ SoaT Ξ, 4-5 пункты можно попробывать выполнить, например, так:@rem Выключаем вывод сообщений на экран
@echo off

:loop
rem Считаем кол-во запущеных процессов с именем war3.exe, если их кол-во =0, то идем на :end
for /f "usebackq" %%a in (`tasklist /fi "Imagename eq war3.exe" 2^>nul ^| find /c "war3.exe"`) do if "%%a" equ "0" goto end
rem Делаем паузу в 1 сек.
ping -n 2 127.0.0.1 >nul
rem Идем на :loop
goto loop

:end
taskkill /IM "WarRun.exe"

SoaT
23.09.2008, 23:04
Slava, проблема не в монтирование диска и запуска игры. Проблема в том, чтобы после закрытии игры, выключать еще одну программу.

bmp, спасибо, буду разбираться

Добавлено через 4 часа 11 минут
Вот что у меня в итоге получилось :)

echo off

echo Entering Virtual CD
"C:\Program Files\Alcohol Soft\Alcohol 120\AxCmd.exe" E: /M:"C:\Games\Warcraft\Virtual\WarCraft III.mds"

echo Starting WarRan
start C:\Games\Warcraft\WarRun\WarRun.exe

echo 4 sec pause
ping -n 4 127.0.0.1

echo Starting W3l.exe
start C:\Games\Warcraft\w3l.exe

echo 10 sec pause
ping -n 10 127.0.0.1

echo Waiting when the war3.exe will be close...
:loop
rem Считаем кол-во запущеных процессов с именем war3.exe, если их кол-во =0, то идем на :end
for /f "usebackq" %%a in (`tasklist /fi "Imagename eq war3.exe" 2^>nul ^| find /c "war3.exe"`) do if "%%a" equ "0" goto end
rem Делаем паузу в 1 сек.
ping -n 2 127.0.0.1 >nul
rem Идем на :loop
goto loop
:end

echo OK. Closing WarRan
taskkill /IM "WarRun.exe"

echo on
А других способов паузы нету?

Добавлено через 1 минуту
Только чегото taskkill /IM "WarRun.exe" пишет что все нормально, процесс убит, хотя на самом деле ни чего он не убил... мб ребут решит траблу..

bmp
24.09.2008, 00:00
Ξ SoaT Ξ, несколько способов создания пауз описаны здесь (http://wiki.oszone.net/index.php/%D0%9F%D0%B0%D1%83%D0%B7%D0%B0_%D0%B2_%D0%BF%D0%B0 %D0%BA%D0%B5%D1%82%D0%BD%D0%BE%D0%BC_%D1%84%D0%B0% D0%B9%D0%BB%D0%B5).
Убиение можно попробывать ужесточить - принудить завершиться и (на всякий случай) убить дочерние процессы:taskkill /T /F /IM "WarRun.exe"

Ringo
26.09.2008, 23:48
Гм.. Всегда был уверен в том, что комманда прописнная в батнике не запустится пока не выполниццо предыдущая... =\
Хотя особо в этот процесс не углублялся.

SoaT
27.09.2008, 02:00
Ringo, start решает ;)

vasil
07.05.2010, 11:01
Помогите пожалуйста с такой проблемой. Мне надо скопировать каталог с одного диска на другой, но проблема в том, что этот каталог имеет еще подкаталоги. Если я применяю в bat файле команду copy например (сopy "d:\KLUpdater\Updates\*.*" "\\Serverrfu\Updates\Update distribution\*.*") то копируется только 2 файла из основного каталога, а подкаталоги не не хотят. Помогите пожалуйста очень надо это сделать.

bmp
07.05.2010, 15:19
vasil, если правильно понял и Windows не ниже 2000, то счастье близко: xcopy "d:\KLUpdater\Updates\*" "\\Serverrfu\Updates\Update distribution\" /e