Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Запуск программ из батника (http://forum.oszone.net/showthread.php?t=104295)

akrav 03-04-2008 23:51 774145

Запуск программ из батника
 
Обычно запуск программ из батника выглядит как строка: “c:\program files\example.exe”
А как быть, если нужно запустить произвольный exe-файл из нужной папки?
Вариант “c:\program files\*.exe” не проходит…

yurfed 04-04-2008 00:09 774164

akrav, это типа *******.bat имя. расширение ? Так?
Задачи на bat-файлах

Gerdewski 04-04-2008 10:04 774358

Цитата:

Цитата akrav
Вариант “c:\program files\*.exe” не проходит… »

Это конечно не подойдет.
И как понимать
Цитата:

Цитата akrav
запустить произвольный exe-файл »

?
Первый попавшийся?
Здесь, мне кажется, лучше пользоваться средствами vbs.

akrav 04-04-2008 14:22 774520

В известной папке находиться один exe-ник. Имя этого файла периодически меняется. Поэтому чтобы не переправлять батник, желательно написать строку для самого общего варианта, т.е. для *.exe.

R0iZ 04-04-2008 14:42 774543

Имхо, простым батником здесь не обойтись
Цитата:

лучше пользоваться средствами vbs.

Petya V4sechkin 04-04-2008 14:42 774542

akrav, обычным циклом:
Код:

For %%I In ("E:\13\*.exe") Do %%I

Admiral 04-04-2008 14:52 774550

Если ехе-файл один подойдёт и код
Код:

dir/B *.exe > 1.bat
start 1.bat

есть над чем поработать, например избавится от необходимости писать файл 1.bat

Wens 06-04-2009 19:37 1085965

Здравствуйте. К сожилению не хватает знаний чтобы немного доделать эту команду For %%I In ("E:\13\*.exe") Do %%I , она работает, но не до конца, после выполнения батником в ХР, открывается всегда один и тот же экзэшник, после его закрытия открывается один и тотже следующий и т. д. , то последывательность открытия всегда одинаковая. Если не отнимет много времени подскажите плз как доделать команду чтобы выбор exe был чисто случайным?

semiono 07-04-2009 06:21 1086427

Код:

@pause
For %%I In ("C:\~\system32\*.exe") Do %%I & Exit
@pause

Кажись так, но я не шарю :)
Паузы после теста можно стереть.

Цитата:

Цитата Wens
она работает, но не до конца, »

как раз таки она работает до конца :)

Wens 07-04-2009 21:27 1087233

Да нет же, я говорю про случайный выбор. Именно случайный выбор. Экзешники включаются по очереди каждый после закрытия предыдущиго, но последывательность всегда одна и таже. А интересно как сделать чтобы выбор первого включающигося экзешника был случайный? Может как то типа "выключить ехе" - "выключить ехе" и так на время от 2 секунд до 5 путем применения ping -n (2-5?) localhost , но тогда как сделать чтобы выбор количества пингов был случайным? Т.е. пока cmd пингует идет процесс включения - выключения экзэшников, прекращение пинга и есть выбор ехе в этот момент открытого, но как тогда сделать произвольное кол-во пингов? Может кто знает? Хотя мне подойдет и скрипт vbs, для случайного выбора файла, только покароче,может кто знает?

Intexid 01-05-2009 04:13 1108381

Wens,
Да нет же, я говорю про случайный выбор. Именно случайный выбор.
Код:

@echo off
setlocal enabledelayedexpansion
:randomize
for %%i in ("<путь к экзешникам>\*.exe") do (
    set current!random:~-1!=%%i
)
for /l %%j in (0,1,9) do (
    if defined current%%j (
        "!current%%j!"
    )
)
goto randomize

процессы генерируются непрерывно, так что если будешь документы им открывать, используй start /wait

Wens 03-05-2009 18:18 1109784

Intexid спасибо за помощь, генерация вроде действительно идет, но экзешники не открываются, как ее остановить? Никакие дописанные снизу команды не действуют. Куда и что надо дописать?

Intexid 04-05-2009 13:16 1110364

Wens
экзешники не открываются
попробуем запускать их start'ом
как ее остановить
пауза или таймер до выхода из цикла
Код:

@echo off
setlocal enabledelayedexpansion
:randomize
for %%i in ("<путь к экзешникам>\*.exe") do (
    set current!random:~-1!=%%i
)
for /l %%j in (0,1,9) do (
    if defined current%%j (
        start "!current%%j!"
    )
    cls
    pause
)
goto randomize

если exe'шники будут вести себя не так как ожидается, скажи как именно,
а продолжаться все это безумие будет, только пока удерживаешь любую клафишу,
можно ограничить количество запусков, или частоту, или задержку вставить

NiOl 04-05-2009 19:20 1110640

Есть переменная "окружения" %random% - выдает случайное число в пределах от 0 и до 32767

1. Если кол-во экзешников строго определено, то заранее высчитав "вес" вероятности на запуск, укладываемся в одну строчку:
(предположим, что экзешников в каталоге 10, тогда вероятность примерно равна 3276 из 32767)

for %%f in (MyFolder\*.exe) do if /I 3276 LSS %random% start /wait %%f

2. Если кол-во экзешников "плавает", то нужно в первом цикле пробежаться и подсчитать их кол-во, затем подсчитать вероятность, а третью строку оставить почти в примере выше, но с заменой уровня вероятности на переменную

gora 05-05-2009 11:31 1111101

Цитата:

Цитата Intexid
start "!current%%j!" »

Так запуск через start писать нельзя! Правильно будет так:
Код:

start "" "!current%%j!"
Первую запись в кавычках start считает заголовком окна и, в вашем варианте, не запустит сам файл, а выведет новое консольное окно с заголовком состоящим из названия этого файла.

Intexid 05-05-2009 12:09 1111136

gora,
Первую запись в кавычках start считает заголовком окна

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

Wens 27-05-2009 00:19 1128372

Ребят, извините, но я не могу разобраться в нагромождении этих команд. @echo off, cls, pause я отлично понимаю, остальное весьма смутно. Путь к экзешникам я указываю, и начинается процесс генерации, но остановить то его как? Как довести до ума вариант Intexida? Где и что надо дописать? Если start или start /wait , то в каком месте их прописывать? Вариант от NiOLa тоже не работает, пробовал с десятью экзешниками.


Время: 12:40.

Время: 12:40.
© OSzone.net 2001-