![]() |
сравнить строки в текстовых файлах
Прошу, помогите написать bat-файл. Хочу сравнить строки в текстовых файлах.
Что есть? Папка. В ней два файла MP4: file1.mp4, file2.mp4. Цель - выяснить, совпадают ли у этих MP4 значения всех параметров, или есть различия? Параметры и значения, например, следующие: codec_name=h264 has_b_frames=1 pix_fmt=yuv420p Инструмент для получения сведений о файлах - ffprobe. https://ffmpeg.org/ffprobe.html ffprobe работает из командной строки. Синтаксис ffprobe, например, следующий: ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner file1.mp4 Хочу, чтобы в bat-файле был следующий алгоритм. 1. bat-файл запускает ffprobe по каждому из двух файлов. bat-файл по каждому из двух файлов в папке создаёт текстовый файл и выводит в него информацию о параметрах и значениях. Одна строка - одна пара параметр-значение. Название текстового файла совпадает с названием MP4, отличается расширение: file1.txt, file2.txt 2. bat-файл сравнивает каждую строку. 3. Если все строки совпадают, bat-файл создаёт текстовый файл report.txt, и в нём написано: различий нет. 4. Если какие-либо строки различаются, bat-файл создаёт текстовый файл report.txt, и в нём написано: есть следующие различия: у файла file2.mp4 отличаются следующие строки: и список строк из файла file2.mp4, которые отличаются от строк файла file1.mp4 |
Konstantinkn, тогда уж тупо пользовать какой-нибудь WinMerge:
Скрытый текст
Код:
@echo off ![]() |
Iska, спасибо. Взял в изучение.
Iska, прошу, напишите в коде комментарии. |
Konstantinkn, к сожалению, пакетные файлы поддерживают ограниченное комментирование. Но Вы можете спросить, ежели что-то непонятно конкретное.
|
Цитата:
А как сделать, чтобы в дополнение к Вашему решению происходило так: 3. Если все строки совпадают, bat-файл создаёт текстовый файл report.txt, и в нём написано: различий нет. 4. Если какие-либо строки различаются, bat-файл создаёт текстовый файл report.txt, и в нём написано: есть следующие различия: у файла file2.mp4 отличаются следующие строки: и список строк из файла file2.mp4, которые отличаются от строк файла file1.mp4 |
Konstantinkn, сделать можно. Но не вижу практического смысла.
|
Цитата:
Код:
@echo off |
greg zakharov, флаг в руки, коллега, флаг в руки ;). Но лукавите Вы, именуя комментариями то, что ими не является. И Вы сие знаете.
|
Iska, что именно не является комментарием? Всё приведенное - комментарии, только похоже вы об этом не знали. Жаль, жаль...
|
greg zakharov, rem или :: предназначены как раз для комментирования, здесь не спорю, а вот насчет других способова - соглашусь с Iska. Это как с холодным оружием: "Является холодным оружием" и "Может быть использовано в качестве холодного оружия" - разные вещи. Так же и тут, обычные строки могут быть использованы в качестве комментария будучи вырезаны из выполнения посредством безусловного перехода или отделены посредством eixt /b, но сами по себе они не являются комментариями. в противном случае нижеприведенный фрагмент тоже можно считать комментарием:
Код:
echo "Здесь мог быть ваш комментарий" > NUL |
Elven, представьте, вы идёте по дороге, перед вами куча дерьма. Что изменится, если вы назовете оную экскрементами? Ничего.
С технической точки зрения всё, что не обрабатывается анализатором\интерпретатором\компилятором есть ни что иное как комментарий, поэтому приведённый вами пример является таковым. |
Не буду спорить, вижу что бесполезно. Но это все равно нецелевое использование операторов. На компиляторы/анализаторы/интерпретаторы можно сколь угодно ссылаться, но всегда есть какое-нибудь "но".
"Для компилятора нет разницы, чем отступы делать - пробелами или табуляцией. А можно вообще никаких отступов не делать, ведь работает!" - а потом приходит yaml и сторонники таких утверждений начинают страдать. |
Elven, не спорьте с greg zakharov, это совершенно бессмысленно.
|
Elven, а сколько "нецелевого" кода написано на форуме (этом и прочем), но никто против не высказывается. Да и где они, критерии "целевого"? Ну а коли вы приплели сюда YAML, позвольте со своей строны затронуть pwsh, точнее рефлексию: с практической точки зрения выгоды от нее сложно переоценить, а вот пользоваться ей не спешат, - это же не значит, что рефлексии нет или пользоваться ей опасно, верно?
DJ Mogarych, а вы в суть хотя бы пытались вникнуть или как и прежде "я - модератор, а значит заведомо прав"? |
Цитата:
Цитата:
Elven, комментарием является только и исключительно REM. «::», равно, как описанное выше коллегой greg zakharov'ым, комментариями, с точки зрения интерпретатора команд cmd.exe, не являются. Цитата:
Цитата:
Цитата:
|
Если у кого-то личные счеты с greg zakharov, то не стоит приплетать их к делу. Устроенная карусель из поддакиваний друг другу истину не отменит.
Комментарий - это пояснение, которое находится внутри комментируемого кода, и не оказывает никакого влияния на результат компиляции программы или её интерпретацию. |
Fors1k, тогда уж цитируйте целиком.
P.S. И какие тут могут быть «личные счёты»?! Вы вообще о чём?! |
О чем спор, собственно?
В каждом интерпретаторе, компиляторе должен быть задокументированный перечень команд, комментариев и т.п.. Всё, что не описано, не является синтаксически верным и может быть изменено в любой момент без какого-либо предупреждения. Следовательно, с точки зрения логики, для командного интерпретатора cmd.exe есть только один вид однострочных комментариев - REM, всё остальное - незадокументированные фичи, которые при некотором сочетании факторов, могут привести к непредсказуемым результатам тчк |
Именно! И комментарий таки обрабатывается тем или иным обработчиком, будь то интерпретатор команд, або транслятор/компилятор. И именно после обработки обработчик «понимает», что именно он должен игнорировать.
|
Цитата:
|
sov44, мне не «в лом», как предположил коллега greg zakharov. Но что там расписывать? Код прост, как пробка. Никаких конкретных вопросов по коду задано не было.
|
Powershell:
Код:
$a = & ffprobe -hide_banner -select_streams v -show_streams -v error -i "D:\Видео\1.mp4" |select-string codec_name,has_b_frames,pix_fmt |
Спасибо всем за Ваши ответы.
Хочу вернуться к этой теме. Я сделал bat-файл. Код:
ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner 1.mp4 > 1.txt Цитата:
|
Вывод в 3.txt одинаковых строк из 1.txt и 2.txt
Код:
@echo off Код:
@echo off Код:
@echo off |
Powershell
Код:
$a = & ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner -i "C:\temp\1.mp4" |
если на PowerShell, тогда по типу моего "Общий" на cmd
Код:
$file1 = 'C:\1.txt' |
alpap, DJ Mogarych, спасибо. Принял к сведению.
Цитата:
Код:
@echo off |
Цитата:
Код:
@echo off |
alpap, спасибо. Принял к сведению.
|
Время: 05:49. |
Время: 05:49.
© OSzone.net 2001-