Войти

Показать полную графическую версию : Копирование первой строки из файла


Страниц : 1 [2]

MultiMax
20-06-2015, 11:38
Здравствуйте! Уже 4 года гоняем скрипт! Все отлично, но вылез один баг. При звучании в эфире песни или программы без тега, скрипт выдает "~14", вместо пустоты :) Скрин прилагается, а также 2 файла, которые скрипт парсит. первый файл скопирован во время звучания в эфире размеченной песни, второй - неразмеченной. Возможно это можно как-то поправить?

https://pp.vk.me/c629226/v629226185/31d7/JMfv3HahDvI.jpg

@echo off

net use \\192.168.113.150\air\PLAYLISTS /user:domain\user pass /permision:no
copy \\192.168.113.150\air\PLAYLISTS\broad.int C:\script_streamtagname\broad.int


for /f "usebackq delims=" %%i in ("broad.int") do set "first_string=%%i"& goto:#
:#
set "first_string=%first_string:~14%"
for /f "delims=^" %%i in ("%first_string: =^%") do echo %%i>"1.txt"
exit /b

Схема:
Есть эфирный компьютер с программой-плеером музыки. Программа выплевывает файл broad.int (копия файла внизу по ссылке), с описанием текущей песни, пути к ней, времени старта + последующие несколько песен в эфире. Скрипт стоит на втором компьютере, по сети копирует этот файл broad.int и копирует в папку со скриптом. NNCRON отслеживает изменение файла broad. int на удаленном компе и запускает батник, который копирует broad.int себе в папку и обрабатывает его, выплевывая текстовый файл с названием песни в эфире :)


ссылка на онлайн вещание, где запущен данный скрипт: http://86.57.151.4:8009/listen.pls


https://drive.google.com/file/d/0B2-7kBvKgY2RNUlXbWpaV0NNYW8/view
Тут скрипт и 2 примера файла.

Foreigner
20-06-2015, 15:44
Проверьте переменную %first_string%:

...
set "first_string=%first_string:~14%"
if "%first_string%"=="~14" set "first_string=Unknown track"
....

MultiMax
20-06-2015, 16:06
сделал, тестируем..)

greg zakharov
21-06-2015, 08:55
Видимо никого не смущают куцые возможности батников в отношении кодировок текстовых файлов... Задача сводилась по сути к:@echo off
setlocal&chcp [начальная_кодировка]>nul
set /p fl=<broad.int
set "fl=%fl:~14%"
echo.%fl%>output.txt
endlocal&chcp 866>nul
exit /bС PowerShell решение задачи будет проще:-join ($$=(gc broad.int)[0])[14..$$.length]

MultiMax
21-06-2015, 11:22
поясните пожалуйста что вы имеете ввиду? скрипт, который вы кинули меняет кодировку?

Foreigner
21-06-2015, 12:06
Видимо никого не смущают куцые возможности батников в отношении кодировок текстовых файлов... »
Кодировка здесь не имеет значения, файл на выходе будет в той же кодировке, что и на входе.

Iska
21-06-2015, 12:26
Кодировка здесь не имеет значения, файл на выходе будет в той же кодировке, что и на входе. »
Ну, тем не менее, файл там весьма занятный: с одной стороны — Unix'овский формат концов строк, с другой — символ с кодом 0x0 в середине строки :).

MultiMax
08-03-2017, 14:14
Добрый день! использую один из скриптов, выложенных в этой теме! Все работает как часы :)

Как заставить его выводить необходимый текст, при появлении файлов из других папок???

Если путь равен X:\Pogoda (тут расположены заставки погоды, фон для ведущего погоды) -- вывести слово "Прогноз погоды"
Если путь равен X:\News (тут расположены заставки новостей, фон для ведущего погоды) -- вывести слово "Новости"
Если путь равен X:\Reklama (тут расположены рекламные ролики) -- вывести слово "Реклама"


поведение скрипта: файл broad.int, который выплевывает радио плеер, копируется в локальную папку, обрабатывается скриптом. Скрипт смотрит на путь к песне в файле broad.int , если в он равен X:\Music_2015 --- выводим название песни и исполнителя, обрезая ненужные символы до и после. Если путь не равен X:\Music_2015, выводим пустоту в файл (команда nul). Задача следующая! Добавить возможность прописать условие!

Если путь равен X:\Music_2015 -- все остается как прежде, Артист - Название песни.
Если путь ИНОЙ или файл без названия (~14), выводить nul -- т.е. сохранить текущее поведение



Вот тело скрипта:

@echo off
net use X:\synadin\playlist /user:domain\user pass /permision:no
copy X:\synadin\playlist\broad.int D:\script_streamtagname\broad.int
0<broad.int Set /P "Str="
Set "Str=%Str:~14%"
Set "Str=%Str: =$%"
For /F "Tokens=1* Delims=$" %%A In ("%Str%") Do Echo %%B|Find /i "X:\Music_2015" 1>nul 2>&1&&Echo.%%A>radiotext.txt||cd.>radiotext.txt
ping 127.0.0.1 -n 5 1>nul 2>&1&&call %0




© OSzone.net 2001-2012