Проверка на существование файла

Доброго времени суток. Вообщем еще такой вопрос. У нас в день выходит несколько информационных передач. Решил их вывод в эфир автоматизировать, нашел 2 варианта:

1. Выбирать из папки последний созданный файл.
Плюсы: Кинул в папку и забыл, если на следующий день нет ничего нового, то крутится старый файл.
Минусы: Нет возможности накидать файлов не пару дней вперед.
2. Выбирать из папки файл по маске даты (?yy_?mm_?dd).
Плюсы: Можно кидать на будущее файлы.
Минусы: Есть файла нет, то ничего не воспроизводится. Надо каждому файлу правильно писать название.

Из второго вытекает еще одна пробема. Есть передача перед которой играет отбивка, сделал через эвентс экшн. Но вот беда, если файла нет то заставка все равно идет в эфир.

Есть ли возможность все эти вещи сделать "красиво"? Или может я чего не правильно делаю или есть вариант закрыть минусы оставив ток плюсы?
 
Пока жду ответа набросал batch файл. Скрипт ищет в папке файл с текущей датой, если не находит копирует последний измененный файл и присваивает ему имя и дату. Завтра буду тестировать.
Код:
@echo off

setlocal EnableDelayedExpansion

echo Script Start...

echo Script File Location: "%CD%"

echo Get Date...

FOR /f "tokens=2 delims==" %%a IN ('wmic OS Get localdatetime /value') DO set "dt=%%a"

set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"

set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YY%-%MM%-%DD%"

echo Date: "%datestamp%"

echo Looking for yesterday file...

IF NOT EXIST "%CD%\%datestamp%.mp3" (

	echo File "%datestamp%.mp3" not exists!
	
	echo Looking latest file...

	FOR /f "eol=: delims=" %%f IN ('dir /b /od *.mp3') DO set "latest=%%f"

	IF "!latest!" == "" ( 

		echo Stop Script. See you!

	) else (

		echo Latest File: "!latest!"

		echo Copy "!latest!" file to "%datestamp%.mp3"

		copy ""!latest!"" ""%datestamp%.mp3""

		echo Update date...

		copy /b ""%datestamp%.mp3"" +,,

		echo Stop Script. See you!

	)

) ELSE (

	echo Yesterday file: "%datestamp%.mp3"

	echo Stop Script. See you!
)

exit
 
Антон Божина сказал(а):
Минусы: Нет возможности накидать файлов не пару дней вперед.
Нет минусов. Создаёте пул папок с именами дней недели (недельный цикл) привязываете задания в планировщике к этим папкам по дням недели и времени выходов (это нужно сделать всего один раз и больше не трогать!) и кидаете файлы в эти папки на хоть на неделю вперед. У меня именно так реализовано.
Не нужно влазить в дебри скриптов, макросов и прочей фигни, мы с вами здесь не программисты, а банальные вещатели.
Антон Божина сказал(а):
Есть ли возможность все эти вещи сделать "красиво"?
Красиво получится, делайте так как я описал.
Антон Божина сказал(а):
Пока жду ответа набросал batch файл.
Ужас какой.  :o
А вы представьте себе, если какая-то ошибка в синтаксисе (тексте) листинга закрадется, вы её вылавливать год будете!
 
Антон Божина сказал(а):
Из второго вытекает еще одна пробема. Есть передача перед которой играет отбивка, сделал через эвентс экшн. Но вот беда, если файла нет то заставка все равно идет в эфир.
Да, такая проблема есть, и к сожалению, простого решения средствами программы нет.

BAT файл можно упростить - достаточно, чтобы он проверял наличие файла, и если он есть, генерировал файл плейлиста .m3u с отбивкой, основной программой, и вылетом. Иначе - плейлист удаляется.

Формат .m3u очень простой - первая строка #EXTM3U и далее в отдельных строках пути к файлам, которые нужно запустить:
Код:
#EXTM3U
C:\path\to\file1.mp3
C:\path\to\file2.mp3
C:\path\to\file3.mp3

В планировщике RadioBOSS у вас задание, которое будет запускать этот плейлист. И еще одно задание для запуска .bat файла - это команда run http://manual.djsoft.net/radioboss/ru/scheduler_commands.htm
 
Novossyol сказал(а):
Нет минусов. Создаёте пул папок с именами дней недели (недельный цикл) привязываете задания в планировщике к этим папкам по дням недели и времени выходов
Как это решает проблему, обозначенную в первом сообщении: не выпускать входной джингл перед передачей, если самой передачи нет?
 
Novossyol сказал(а):
Нет минусов. Создаёте пул папок с именами дней недели (недельный цикл) привязываете задания в планировщике к этим папкам по дням недели и времени выходов (это нужно сделать всего один раз и больше не трогать!) и кидаете файлы в эти папки на хоть на неделю вперед.
Ну как вариант, но не очень красивый. Ибо у нас ежедневных передач много (выпуск новостей краевых, выпуск новостей районных, выпуск новостей городских, и все это в 2х экземплярах на утро\вечер, новости культуры, тоже 2 разных выпуска в день и 5 выпусков всемирных новостей). Представь сколько папок и как все будет запутанно...
Novossyol сказал(а):
Не нужно влазить в дебри скриптов, макросов и прочей фигни, мы с вами здесь не программисты, а банальные вещатели.
Ну а я вот наоборот, лучше написать программу или скрипт, который бы еще сильнее упрощал все. Если бы к программе можно было писать плагины, я бы уже написал все что мне надо.
djsoft сказал(а):
BAT файл можно упростить - достаточно, чтобы он проверял наличие файла, и если он есть, генерировал файл плейлиста .m3u с отбивкой, основной программой, и вылетом. Иначе - плейлист удаляется.
Спасибо, вариант хороший. Но пока сделал, пустую мп3, на которую меняется заставка, если нет файла. Вечером скрипт выложу. Плюс сделал так что, если есть определенный файл в папке, то скрипт ничего не будет делать.


А можно как то сделать задержку после бат файла? Боюсь может такое случиться, что файл не успеет скопироваться, а уже нужно будет идти эфир...
 
Антон Божина сказал(а):
Из второго вытекает еще одна проблема. Есть передача перед которой играет отбивка, сделал через эвентс экшн. Но вот беда, если файла нет то заставка все равно идет в эфир.
Монтируйте отбивку в саму передачу и проблемы не будет  ;D ::)
 
ivanovandrey сказал(а):
Самый маленький и дешёвый SSD решит эту проблему.
Да и обычный с этим справляется, но мало ли. По факту они ж прям в один момент происходят, а если файл не будет доступен и тд...
Chaos сказал(а):
Монтируйте отбивку в саму передачу и проблемы не будет  ;D ::)
Нам ее присылают уже готову, 5 выпусков в день. Конечно, можно ее домонтировать, но это все время, а когда в штате двое ведущих и они же монтажеры и куча контента на них, это затруднительно.

Вообщем решил переписать батник под создание плейлиста, в который будут вписываться новости.
 
Chaos сказал(а):
Монтируйте отбивку в саму передачу и проблемы не будет
Я обычно так и делаю, если завал по количеству передач, но такое редко бывает, точнее сказать даже не помню когда было.
Что у ТС там за радио такое, видать админка в учредителях, раз сыпет программами. У вас радио информационное, не музыкальное, зачем столько информации, кому она нужна. ???
Нам бы такое кол-во за деньги, я бы этот вопрос полюбас решил без всяких макросов и скриптов, а только средствами папок, файлов и путей к ним, с возможностью разных вариантов выборок файлов из папок.
Антон Божина сказал(а):
Нам ее присылают уже готову, 5 выпусков в день.
У меня тоже присылают через облачное хранилище 5 выпусков в день "Новости в стране и в мире", в автомате и ничего, всё отлично работает.
Сначала звучит часовая отбивка, потом спонсор (если есть), далее новости, потом погода и после погоды песня, связанная со временем года.
Как уже сказали выше, добавьте перед новостями папку и путь к ней и в неё кидайте заставку.

Код:
#EXTM3U
C:\path\to\Часовая отбивка.mp3
C:\path\to\Заставка.mp3
C:\path\to\Новости.mp3
C:\path\to\Чё хотите ставьте.mp3
C:\path\to\И так далее.mp3

Надеюсь заставка не меняется "5 раз на дню"? ;D
Если самой передачи нет (а это наверняка исключительный случай и редкий), отключаете ручками
файл в папке, т.е. к примеру был Заставка.mp3, стал Заставка.mp 3, секундное дело и всё, файл в папке лежит, вы его видите, но играть уже не будет. Думаю двух инженеров линейщиков это не затруднит.
...А что вы хотели? Вы же там работаете и нужно хоть что-то делать, а не получать тупо зарплату!  ;)
Надеюсь доступ к вещательному компу у вас есть?
Антон Божина сказал(а):
Представь сколько папок и как все будет запутанно...
Со скриптами и батниками вы вообще "зашьётесь". папки и файлы хоть физически видны на HDD, а выполнение скрипта ещё неизвестно как отработает и на что повлияет.
А сорванный линейный эфир уже не вернёшь...
 
djsoft сказал(а):
И еще одно задание для запуска .bat файла - это команда run http://manual.djsoft.net/radioboss/ru/scheduler_commands.htm
А почему если я просто в задании указываю ран, то он просто запускает файл, а если в экшн лист добавляю ран, то он добавляется в плейлист? Можно ли как то сделать, что бы он просто запускался?
 
Нам бы такое кол-во за деньги, я бы этот вопрос полюбас решил без всяких макросов и скриптов, а только средствами папок, файлов и путей к ним, с возможностью разных вариантов выборок файлов из папок.
Однажды к Учителю пришёл ученик и спросил: "Учитель, а если подерутся каратист и бегун, кто победит"? И Учитель ответил: "Тот, кто упорнее тренировался".
 
Novossyol сказал(а):
Если самой передачи нет (а это наверняка исключительный случай и редкий), отключаете ручками
файл в папке
Так изначальный вопрос в теме был - как это делать автоматически. В RadioBOSS этого пока нет, но планируется. Из простых средств остаются только .bat файлы.

Novossyol сказал(а):
выполнение скрипта ещё неизвестно как отработает и на что повлияет.
Там все команды документированы и делают только то, что сказано. Тем более этим командам уже лет 50 - если бы они не работали, ничего бы не работало. Не бойтесь команд :)

Антон Божина сказал(а):
А почему если я просто в задании указываю ран, то он просто запускает файл, а если в экшн лист добавляю ран, то он добавляется в плейлист? Можно ли как то сделать, что бы он просто запускался?
Я бы рекомендовал разнести команду run и собственно запуск в эфир по времени (то есть, делать разными заданиями) - например, запускать .bat файл секунд за 10 до эфира. Заодно это решает проблему "гонки", про которую вы говорили ранее:
Антон Божина сказал(а):
А можно как то сделать задержку после бат файла? Боюсь может такое случиться, что файл не успеет скопироваться, а уже нужно будет идти эфир...
 
Спасибо за советы! В общем сделал все на батниках, двумя заданиями. Одно задание добавляется в список плейлист, второе за 5 минут до первого обновляет данные в плейлисте.

Ну и собственно сам скрипт. Вдруг кому пригодятся. Кладется в папку с нужными файлами. Если в папке создать файл stop, то скрипт не будет искать последние файлы в папке. Если stop-текущая-дата по типу stop-17-12-28, то именно в этот день не будет поиска последнего файла при отсутствии файла по дате. Если start-текущая-дата, то наоборот, именно в этот день скрипт будет искать последний файл в папке, даже если отключен поиск или есть stop файл в папке.

Код:
@echo off

chcp 1251 > nul

rem Искать ли последний файл добавленный в папку и добавлять ли его в плейлист

set SearchLast=true

rem Название файла плейлиста

set FileName=playlist

rem Присваиваем ему расширение

set FileName=%FileName%.m3u

rem Включение отложенного расширения переменных среды

setlocal EnableDelayedExpansion

echo Запускаем скрипт...

echo Путь нахождения скрипта: %CD%

echo Получаем текущую дату...

rem Получаем текущую дату и время

FOR /f "tokens=2 delims==" %%a IN ('wmic OS Get localdatetime /value') DO set "dt=%%a"

set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"

set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

rem Маска поиска файла

set "datestamp=%YY%-%MM%-%DD%"

echo Маска для поиска файла: "%datestamp%"

rem Проверка на нахождение файла STOP в папке, если находим перестаем искать последний файл

IF EXIST "%CD%\STOP" (

	echo Найден STOP файл!

	set SearchLast=false 

)

rem Проверка на нахождение файла STOP с определенной датой в папке, если находим перестаем искать последний файл

IF EXIST "%CD%\STOP-%YY%-%MM%-%DD%" (

	echo Найден STOP файл с текущей датой!

	set SearchLast=false 

)

rem Проверка на нахождение файла START с определенной датой в папке, если находим ищем последний файл

IF EXIST "%CD%\START-%YY%-%MM%-%DD%" (

	echo Найден START файл с текущей датой!

	set SearchLast=true 

)

echo Ищем файл по маске...

IF NOT EXIST "%CD%\%datestamp%.mp3" (

	echo Файл %datestamp%.mp3 не найден!

rem Если файла нет

	IF %SearchLast% == true (

		echo Ищем последний файл в папке...

		FOR /f "eol=: delims=" %%f IN ('dir /b /od *.mp3') DO set "latest=%%f"
	
		IF "!latest!" == "" (

rem Если последнего файла нет, то плейлист остается пуст
	
			echo #EXTM3U > "%CD%\%FileName%"
	
			echo Завершение скрипта. Увидимся!
	
		) ELSE (

rem Добавляем в плейлист последний файл из папки
	
			echo Найден последний файл: "!latest!"
	
			echo Добавляем "!latest!" в %FileName%...
	
			echo #EXTM3U > "%CD%\%FileName%"
	
			echo %CD%\!latest! >> "%CD%\%FileName%"
	
			echo Дело сделано. Увидимся!
	
		)

	) ELSE (

rem Поиск последнего файла отключен, оставляем плейлист пустым

		echo #EXTM3U > "%CD%\%FileName%"
	
		echo Завершение скрипта. Увидимся!

	)

) ELSE (

rem Файл найден, добавляем его в плейлист

	echo Файл найден: "%datestamp%.mp3"

	echo Добавляем его в %FileName%...

	echo #EXTM3U > "%CD%\%FileName%"

	echo %CD%\%datestamp%.mp3 >> "%CD%\%FileName%"

	echo Дело сделано. Увидимся!

)

exit

Вообще было бы классно если бы добавили разные дополнительные условия в расписании, на присутствие файла в папке\расписании, на активность какого то пункта в расписании и тд. Что то, что бы можно было добавлять исключения из правил, типа указал даты когда не надо делать задание и тд. Включение или отключение заданий по условиям.
 
djsoft сказал(а):
Так изначальный вопрос в теме был - как это делать автоматически.
Согласитесь очень много из того, что нужно в RB, автоматически никогда не будет реализовано, ручки остаются и это неплохо. Самоконтроль лучше всего.
Антон Божина сказал(а):
Ну и собственно сам скрипт. Вдруг кому пригодятся. Кладется в папку с нужными файлами. Если в папке создать файл stop, то скрипт не будет искать последние файлы в папке. Если stop-текущая-дата по типу stop-17-12-28, то именно в этот день не будет поиска последнего файла при отсутствии файла по дате. Если start-текущая-дата, то наоборот, именно в этот день скрипт будет искать последний файл в папке, даже если отключен поиск или есть stop файл в папке.
Очень сложно логически и физически это понять, для чего всё-таки это нужно. Извиняюсь, но я "не въехал" (может из-за того, что мне это не нужно?). Я было подумал, что всё намного проще...

Как вы все помните, где у вас какие задания, скрипты, команды, макросы, файлы лежат и что из этой "каши" в итоге должно получиться?  ???
Вы, кстати, не ответили на интересующий меня вопрос, вы станция "какого разлива", местная, региональная, федеральная?
 
Novossyol,  это называется пришел на форум умник-человек любящий ковыряться в коде ....и такие люди простых и логических путей не ищут как правило )  для него это не паханное поле раздумий и новых идей реализации и показуха на публику.

и вообще плохая идея кого-либо уговаривать и доказывать .. все тут взрослые и перевоспитывать бесполезно ..  каждый высказал своё мнение и на этом можно закрыть разговор.
 
Alex Ivanov, спасибо, вы единственный здравомыслящий и адекватный человек, который рассудил, как надо.
Блин, а я то повелся.  ;D
 
не ведитесь и бес толку не спорьте, а лучше сделайте показательно-ознакомительно-информационное видео для новичков и бывалых .. как и каким образом сделать/спланировать в планировщике и вообще в РБ эфир на сутки разными методами и хитрыми не сложными приемами ... 
это и будет существенным шагом для того, чтоб начать к вам прислушиваться и делать так как делаете это вы ...  станьте первым в этом решении вопроса для многих неопытных и "неочень" р/вещателей !

 
К сожалению, пока нет времени заниматься съёмкой видео и образовательными функциями.
 
Novossyol сказал(а):
Очень сложно логически и физически это понять, для чего всё-таки это нужно. Извиняюсь, но я "не въехал" (может из-за того, что мне это не нужно?). Я было подумал, что всё намного проще...
Кинул в папку, раз настроил и забыл. Все файлы для воспроизведения после монтажа кидаются туда и все. Если какие то экстренные обстоятельства, создал стоп файл и все. Если не нужен, удалил и так же все. Доступ к папке можно получить от куда угодно. А в коде скрипта вас никто и не заставляет разбираться. Вы ж программой пользуетесь и исходных кодов не просите.

Novossyol сказал(а):
Как вы все помните, где у вас какие задания, скрипты, команды, макросы, файлы лежат и что из этой "каши" в итоге должно получиться? 
Одна папка + скрипт, лучше чем десятки папок с файлами.

Novossyol сказал(а):
Вы, кстати, не ответили на интересующий меня вопрос, вы станция "какого разлива", местная, региональная, федеральная?
Местная, пол дня ведущие сидят, в эфире. Половина музыка без ведущих. Днем 3 повтора дневного выпуска местных  новостей и 3 повтора краевых, вечером 3 повтора вечерних местных и краевых. 5 выпусков в день всемирных\российских новостей. 2 раза в день новости культуры. Ну и еще какие то передачи, не помню все. Но новости до 2х минут вроде все...

Alex Ivanov сказал(а):
Novossyol,  это называется пришел на форум умник-человек любящий ковыряться в коде ....и такие люди простых и логических путей не ищут как правило )  для него это не паханное поле раздумий и новых идей реализации и показуха на публику.
А можно мне ссылочку на простой и логичный путь? 12 разных програм в день * 7 дней в неделю = 84 папки для файлов, и хз скок заданий, а уж сколько ручного труда... Против 1 скрипта, и 12 заданий и 12 папок. Где больше логики и простоты? А уж про показуху. Если для вас написание элементарного скрипта (30 минут времени + гугл) для решения поставленной задачи и экономии уймы времени - показуха... Но, Вам, конечно виднее ;D
 
Назад
Верх