Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Открыть новую тему     Написать ответ в эту тему

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
часть 1 | часть 2 | часть 3 | часть 4 | часть 5
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору > Автоматизация администрирования
Microsoft Windows > Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
> Описание Cmd.exe > Command shell overview
> Using batch files > Using batch parameters > Using filters > Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.51 до Windows 10) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 4.0, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на текущей версии ОС. Ссылки wdho.ru tinyupload.com dbree.org
 
· Сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 38025 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bytie
Можно - https://ss64.com/nt/syntax-substring.html

Код:
@echo off
set var=abcdefghijklmnopqrstuvwxyz
echo %var:~10,5%
echo %var:~-7%
echo %var:~0,-7%

 
Результат:
klmno
tuvwxyz
abcdefghijklmnopqrs
 
 
Добавлено:
Соответственно, получается типа такого:

Код:
@echo off
setlocal enabledelayedexpansion
del /q 1_temp.txt
for /f "tokens=*" %%A in (1.txt) do (
set /a found=0
set AAA=%%A
for /f "tokens=*" %%C in (2.txt) do (set CCC=%%C
if /I "!AAA:~0,10!"=="!CCC:~0,10!" (echo !AAA:~0,10!!CCC:~10!>>1_temp.txt & set /a found=1) )
if !found! neq 1 echo !AAA!>>1_temp.txt)  

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 17:40 25-12-2021 | Исправлено: Fenrizz, 18:43 25-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
@echo off
setlocal enabledelayedexpansion
del /q 1_temp.txt
for /f "tokens=*" %%A in (1.txt) do (
set /a found=0
set AAA=%%A
for /f "tokens=*" %%C in (2.txt) do (set CCC=%%C
if /I "!AAA:~0,10!"=="!CCC:~0,10!" (echo !AAA:~0,10!!CCC:~10!>>1_temp.txt & set /a found=1) )
if !found! neq 1 echo !AAA!>>1_temp.txt)

Решил я таки рассказать, зачем это нужно. Так лучше будет для понимания. Это нужно для копирования токенов (паролей) из одного IPTV-плейлиста в другой. В одном плейлисте у меня мои IPTV-каналы, которые я смотрю. И больше ничего нет в этом плейлисте. Этот плейлист я составил сам. Во втором плейлисте находятся все каналы, то есть там есть и некоторые из моих и ещё куча других, которые я не смотрю. Второй плейлист составлял кто-то другой. Его я скачиваю каждый день из сети (тот самый файл 2.txt, который обновляется сам по себе). Я смотрю каналы только с помощью первого плейлиста. И в некоторых каналах в этом плейлисте используются токены (пароли). А для других каналов в этом же плейлисте токены не используются. Те ссылки, что есть у меня в этом плейлисте (с токенами) - это, по-моему, лучший вариант. Других ссылок (без токенов) для этих каналов я не нашел. Эти токены устаревают каждый день и их необходимо обновлять. Иначе эти каналы перестают работать. Вручную перекопировать токены заколебёшься. Для скачки второго плейлиста из сети я уже сделал батник. Скачивается с помощью wget.exe. Теперь мне надо автоматически перекидывать токены из скачанного файла в мой. Причём только для указанных в батнике каналов. Для других каналов, которые есть и в первом файле и во втором ничего копировать не надо, потому что в первом файле и так стоят правильные ссылки и правильней некуда либо я не хочу их менять. Во втором файле все каналы находятся чёрти в каком порядке и брать из него нужно только нужные токены.
 
Залил файлы с конкретным примером:
Update_tokens.bat
Все_каналы.m3u - плейлист со всеми каналами, который каждый день скачивается из сети. Из него надо брать свежие рабочие токены для моих избранных каналов.
Мои_каналы.m3u - первый плейлист, из которого я смотрю каналы (бывший файл 1.txt).
Мои_каналы_должно_получиться.m3u - должно получаться так.
Мои_каналы_сейчас_получается.m3u - с помощью текущего батника получается так (там совсем белиберда).
 
Задача - обновить токены только для этих каналов:
Кинохит
Киномикс
Киносемья
Кинокомедия
Мужское кино
Кинопремьера
А для остальных - не обновлять (там и так ссылки какие надо). В том числе не обновлять для канала Киносерия (не хочу), хоть для него и есть обновлённый токен в файле Все_каналы.m3u.
 
Кстати, в результирующем файле (Мои_каналы_сейчас_получается.m3u, бывший 1_temp.txt) в конце каждой строки получается лишний пробел. В исходных файлах его не было. Лишних пробелов не должно быть.
 
Извиняйте, что сразу не рассказал, для чего это. Буду знать, что лучше сразу рассказывать.

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 07:40 26-12-2021 | Исправлено: Rako1, 08:16 26-12-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1
Да уж, с этого надо было начинать
 
Как я понимаю, длина токена всегда равна 20 символам? То есть последние 20 символов от конца строки?  
 

Код:
@echo off
setlocal enabledelayedexpansion
 
for /f "tokens=*" %%A in (Мои_каналы.m3u) do (
set /a found=0
set /a found2=0
set AAA=%%A
 
if /I "!AAA:~0,8!"=="#EXTINF:" (set channel=%%A&echo %%A)
if /I "!AAA:~0,1!"=="#" if /I NOT "!AAA:~0,8!"=="#EXTINF:" (set comment=%%A&echo %%A)
if /I "!AAA:~0,4!"=="http" (set link=%%A)
 
for /f "tokens=*" %%C in (Все_каналы.m3u) do (set CCC=%%C
if !found! equ 1 if /I "!AAA:~0,4!"=="http" if /I "!CCC:~0,4!"=="http" (
if /I "!CCC:~-27,6!"=="?token" (echo !link:~0,-20!!CCC:~-20!&echo.) else (echo !link!&echo.) )
if /I "!CCC!"=="!channel!" (set /a found=1&set /a found2=1) else (if /I "!CCC:~0,8!"=="#EXTINF:" set /a found=0) )
if !found2! neq 1 if /I "!AAA:~0,4!"=="http" (echo !link!&echo.) )  

 
Так как есть кириллические символы, то файл надо сохранять в кодировке DOS-866 и запускать так
Update_tokens.bat>Мои_каналы_должно_получиться.m3u

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 09:52 26-12-2021 | Исправлено: Fenrizz, 10:22 26-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
Как я понимаю, длина токена всегда равна 20 символам? То есть последние 20 символов от конца строки?

Для некоторых каналов в пределах Все_каналы.m3u она разная. Но для своего канала его длина, я думаю, всегда одна. То есть если мы видим, что для данного канала она, скажем, 30 символов, то при обновлении Все_каналы.m3u, эта длина так и будет 30 символов для этого канала. А вот последние символы от конца строки или какие-то от начала строки - это уже вам решать. На всякий случай скажу, что бывает и такая ситуация:

Код:
https://live-hls-viasat-secure.cdnvideo.ru/viasat/TV1000_HD.smil/playlist.m3u8?e=1641388933&md5=mUGAl9kKdLTHsDMzSHQBMQ

Вместо "token=" есть "e=..." и "md5=...". И если хотя бы одно из этих двух убрать, то перестаёт работать. Надо копировать оба. Вот я и не знаю, как будет правильнее, то ли это сколько-то символов с конца, то ли по-другому. В любом случае первая часть ссылки, т.е. "https://live-hls-viasat-secure.cdnvideo.ru/viasat/TV1000_HD.smil/playlist.m3u8" может поменяться в Все_каналы.m3u в будущем. И мне придётся менять это в батнике. По-другому никак, потому как эти изменения от меня не зависят. Точно также может поменяться и длина токена для определённого канала в Все_каналы.m3u в будущем. Но это происходит нечасто, как я понимаю. Может годами быть одна и та же длина, а потом поменяться, а может вообще никогда не менялась и не поменяется. Тоже придётся менять это в батнике если длина изменится.
 
В IPTV-плейлисте ещё может быть строка, начинающаяся с:

Код:
#EXTM3U

И ещё другие строки, начинающиеся на что-то кроме "http", "#", "#EXTINF:". Их тоже надо учитывать? Ещё может быть вместо:

Код:
#EXTINF:-1,Кинохит

такое:

Код:
#EXTINF:-1 catchup="append" catchup-days="7" catchup-type="flussonic" group-title="Кино и сериалы" tvg-logo="https://getsiptv.ru/img/ch_icons/kinohit.png" channelId="409" tvg-id="kinoxit",Кинохит

Т.е. там вообще может быть всё, что угодно))
Поэтому я и думаю, может быть для идентификации канала использовать начало ссылки (до токена)? Это начало, мне кажется будет наиболее постоянным в Все_каналы.m3u. Кстати если идентифицировать канал, для которого надо поменять токен по строке:

Код:
#EXTINF:-1,Кинохит

то это будет неправильно, потому что в плейлисте могут быть дубли каналов, т.е. может быть такое (на случай, если один канал не работает, то может быть работает другой):

Код:
#EXTINF:-1,Кинохит
http://сайт.ru/kinohit/video.m3u8?token=ulyxukafyqaredon1198
 
#EXTINF:-1,Кинохит
http://сайт2222.com/23554j64j5k6hg/index.m3u8

 
Последний ваш код меняет токен только для канала Киносерия. Так должно быть?

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 12:18 26-12-2021 | Исправлено: Rako1, 12:24 26-12-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1

Цитата:
Последний ваш код меняет токен только для канала Киносерия. Так должно быть?

Нет, на тех примерах, которые Вы выкладывали в предыдущем посте должен менять у всех. В какой кодировке у Вас исходные файлы?

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 12:28 26-12-2021 | Исправлено: Fenrizz, 12:33 26-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
В какой кодировке у Вас исходные файлы?

Мои_каналы.m3u - в 1251 (ANSI - Кириллица)
Все_каналы.m3u - в 65001 (UTF-8) без BOM

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 12:46 26-12-2021 | Исправлено: Rako1, 08:48 28-12-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1

Цитата:
Все_каналы.m3u - в 65001 (UTF-8) без BOM

Наверное, в этом и проблема, попробуйте переконвертировать его в Windows-1251. Для автоматической перекодировки можно использовать http://gnuwin32.sourceforge.net/packages/libiconv.htm

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 09:39 28-12-2021 | Исправлено: Fenrizz, 09:47 28-12-2021
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1

Цитата:
Мои_каналы.m3u - в 1251 (ANSI - Кириллица)  
Все_каналы.m3u - в 65001 (UTF-8) без BOM

В тех файлах которые вы выкладывали кодировка одинаковая - cp1251.

Всего записей: 6052 | Зарегистр. 08-09-2001 | Отправлено: 10:06 28-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
Для автоматической перекодировки можно использовать http://gnuwin32.sourceforge.net/packages/libiconv.htm

А просто AkelPad'ом менять неправильно? Дело в том, что хоть в OEM, хоть в ANSI, хоть в UTF-8. Всё равно. И, главное если переставить канал Киносерия на другую строку, то всё тоже самое, то есть меняет токен только для него. Менял кодировку пока только AkelPad'ом.
 
los

Цитата:
В тех файлах которые вы выкладывали кодировка одинаковая - cp1251.

В примерах ANSI, да. А в том файле, что я буду использовать может быть и ANSI и UTF-8 и может ещё какая-то, даже не знаю, какая встретится. Даже и не думал, что кодировка сыграет роль. Вообще надо, чтобы было универсально, т.е. чтоб я мог и из Все_каналы.m3u, который в UTF-8 брать токены и из Все_каналы.m3u, который в ANSI.

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 11:32 28-12-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1
Выложите ваши файлы куда-нибудь - посмотрю.
Но надо понимать, что возможности bat скриптов для обработки текстовых файлов ограничены, можно сделать более универсальное решение на PowerShell.

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 11:56 28-12-2021 | Исправлено: Fenrizz, 11:57 28-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Свои файлы выложить я не могу. В них информация, которую я не могу показывать. Могу выложить примеры. Которые собственно уже выложил. А можно ли в батнике явно задать строку ссылки, токен которой копировать? Т.е. чтобы батник не копировал все токены всех каналов, а только тех, что указать?

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 12:53 28-12-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1
Я прямо сейчас проверил свой скрипт на тех файлах, которые Вы выложили - он меняет токен у всех каналов, так что проблема на Вашей стороне.

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 13:32 28-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
Я прямо сейчас проверил свой скрипт на тех файлах, которые Вы выложили - он меняет токен у всех каналов, так что проблема на Вашей стороне.

Да, действительно. Это я напутал. Опять извиняюсь. Ваш код меняет токены у всех каналов. А как насчёт того, чтобы в батнике явно задать строку ссылки, токен которой копировать? Т.е. чтобы батник не копировал все токены всех каналов, а только тех, что указать?

Всего записей: 885 | Зарегистр. 17-12-2007 | Отправлено: 02:35 29-12-2021
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 15:44 03-01-2022 | Исправлено: Roman_Hayretdinov, 23:14 03-01-2022
oval2003



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov

Цитата:
Подробнее...

Может проще попробовать установить данный пакет:
https://blog.simplix.info/updatepack

Всего записей: 3837 | Зарегистр. 08-07-2006 | Отправлено: 16:08 03-01-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oval2003, безусловно, это проще, но там интегрированы обновления из Windows XP Embedded, а я хочу установить обновы именно для стандартной Windows XP. К тому же, этот скрипт (если его напишут) можно будет использовать и для других Windows

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 17:08 03-01-2022
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Roman_Hayretdinov
Бывает, что обновления несут не только файловую нагрузку, а, например, добавляют параметры в реестр. Так что ставьте все, лишнего не поставится.
И вообще, чем не нравятся обновы от эмбедки? Цитирую:
Цитата:
По номерам KB custom-заплаток для XP ничего нового относительно заплаток для WES09 я не нашел

Всего записей: 10853 | Зарегистр. 11-03-2002 | Отправлено: 03:18 04-01-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите как заменить знак процента в строке
в инете вот так пишут но не работает set !_out:%%=^%!

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 06:39 05-01-2022
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Перед этим надо добавить (в начале файла)
Setlocal Enabledelayedexpansion

Всего записей: 565 | Зарегистр. 12-09-2017 | Отправлено: 07:55 05-01-2022 | Исправлено: Fenrizz, 08:24 05-01-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
добавил сразу. не помогает

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 08:32 05-01-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2023

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru