Войти

Показать полную графическую версию : [решено] Произвольный запуск одного из бат файлов


XXXp
10-07-2015, 02:57
Помогите, очень нужна помощь.
Есть 6 batников, допустим c:/bat/1.bat, c:/bat/2.bat, c:/bat/3.bat и тд., нужно запускать один из них в произвольном (random) порядке.
Заранее огромное спасибо!

Anonymоus
10-07-2015, 06:57
@Echo Off
SetLocal EnableDelayedExpansion

:: Задаём имена файлов для запуска через запятую, пробелы в именах допустимы.
Set Files[]=one.bat,two.bat,three.bat,two hundreds.bat,something.exe

:: Подсчитываем общее число указанных файлов и пишем их имена в переменные
Set i=0
Set "Files[]=%Files[]:,=" "%"
Set "Files[]="%Files[]%""
For %%A In (%Files[]%) Do (
Set /A i+=1
Set Files[!i!]=%%~A
)

:: С помощью ГПСЧ выбираем выбираем случайный файл из списка и запускаем его
Echo %Random%!Random!>nul
Set /A n=(!i!*!Random!/32768)+1
Start "" "!Files[%n%]!"
Pause&Exit

Foreigner
10-07-2015, 08:16
@echo off
setlocal

for %%i in ("c:\bat\*.bat") do call:1 "%%~nxi"
for /f "tokens=2 delims==" %%i in ('set bat_') do set "bat=%%i"
start "" "c:\bat\%bat%"
goto:eof

:1
set "bat_%random%=%~1"

XXXp
11-07-2015, 01:26
Foreigner, Anonymоus, Спасибо большое!

XXXp
11-07-2015, 01:42
Вопрос только, там в бат файлах у меня простейшие действия типа move, copy и тд. Как сделать чтобы после запуска ваших скриптов и выполнения команды из рандомного батника, cmd.exe закрывался, а то он у меня остается запущенным в режиме командной строки...

Foreigner
11-07-2015, 08:45
XXXp, замени goto:eof на exit

Georgio
11-07-2015, 10:48
Как сделать чтобы после запуска ваших скриптов и выполнения команды из рандомного батника, cmd.exe закрывался, а то он у меня остается запущенным в режиме командной строки... »




Ещё вчера заметил, что и Anonymоus, и Foreigner, как сговорившись:), для вызова пакетного файла используют команду "START".

При таком способе вызова действительно окно "cmd.exe" остаётся открытым, так как пакетный файл запускается интерпретатором командной строки по умолчанию с ключом "/K" ("выполнение указанной команды (строки) без последующего завершения").

В этом случае не поможет даже замени goto:eof на exit ».

Чтобы этого не происходило, для команды "START" надо использовать такую конструкцию: start "" cmd /c "c:\bat\%bat%".


А вообще для вызова пакетного файла лучше использовать команду "CALL": call "c:\bat\%bat%".

Foreigner
11-07-2015, 11:08
В этом случае не поможет даже »

Почему? Запускающий батник отработает и окно закроется.

Georgio
11-07-2015, 11:33
У вызываемого пакетного файла нет своего окна. Есть окно процесса "cmd.exe" c командной строкой C:\Windows\system32\cmd.exe /K "c:\bat\example.bat",
а такое окно само не закроется.

Foreigner
11-07-2015, 13:05
Georgio, А понял, ты имеешь ввиду тот батник, который запустится

XXXp
11-07-2015, 23:55
Georgio, Спасибо большое! Помогло!




© OSzone.net 2001-2012