Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Произвольный запуск одного из бат файлов

Ответить
Настройки темы
CMD/BAT - [решено] Произвольный запуск одного из бат файлов

Пользователь


Сообщения: 103
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 02:57, 10-07-2015

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:57, 10-07-2015 | #2



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

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


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Код: Выделить весь код
@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"
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:16, 10-07-2015 | #3


Пользователь


Сообщения: 103
Благодарности: 0

Профиль | Отправить PM | Цитировать


Foreigner, Anonymоus, Спасибо большое!

Отправлено: 01:26, 11-07-2015 | #4


Пользователь


Сообщения: 103
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:42, 11-07-2015 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


XXXp, замени goto:eof на exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:45, 11-07-2015 | #6


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата XXXp:
Как сделать чтобы после запуска ваших скриптов и выполнения команды из рандомного батника, cmd.exe закрывался, а то он у меня остается запущенным в режиме командной строки... »



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

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

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

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


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

Последний раз редактировалось Georgio, 11-07-2015 в 14:46. Причина: пропущенная запятая.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:48, 11-07-2015 | #7


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата Georgio:
В этом случае не поможет даже »
Почему? Запускающий батник отработает и окно закроется.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:08, 11-07-2015 | #8


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


У вызываемого пакетного файла нет своего окна. Есть окно процесса "cmd.exe" c командной строкой
Код: Выделить весь код
C:\Windows\system32\cmd.exe  /K "c:\bat\example.bat"
,
а такое окно само не закроется.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:33, 11-07-2015 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Georgio, А понял, ты имеешь ввиду тот батник, который запустится
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:05, 11-07-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Произвольный запуск одного из бат файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - перенос файлов из одного домена в другой nokogerra Windows Server 2008/2008 R2 1 25-06-2014 21:41
Потребовалось восстановление одного из файлов данных системного реестра.... vlnik Microsoft Windows 2000/XP 5 31-03-2014 17:29
CMD/BAT - [решено] Запуск одного bat файла из другого root13 Скриптовые языки администрирования Windows 4 28-10-2013 15:30
[решено] Запуск одного типа файлов разными копиями программы. vjtooth AutoIt 3 10-09-2012 03:09
CMD/BAT - копирование файлов удовлетворяющих маске из одного каталога в два других Gablik Скриптовые языки администрирования Windows 5 15-09-2011 15:13




 
Переход