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

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

Ответить
Настройки темы
CMD/BAT - [решено] сравнить строки в текстовых файлах

Новый участник


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

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


Прошу, помогите написать 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

Отправлено: 17:34, 24-10-2020

 

Ветеран


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

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


sov44, мне не «в лом», как предположил коллега greg zakharov. Но что там расписывать? Код прост, как пробка. Никаких конкретных вопросов по коду задано не было.

Отправлено: 19:01, 29-10-2020 | #21



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

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


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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
$b = & ffprobe -hide_banner -select_streams v -show_streams -v error -i "D:\Видео\2.mp4" |select-string codec_name,has_b_frames,pix_fmt

diff $a $b
Вывод допилите как вам нужно.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 09:57, 30-10-2020 | #22


Новый участник


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

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


Спасибо всем за Ваши ответы.

Хочу вернуться к этой теме.

Я сделал bat-файл.
Код: Выделить весь код
ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner 1.mp4  > 1.txt
ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner 2.mp4  > 2.txt
fc /l /n 1.txt 2.txt > result-of-checking.txt
В файле result-of-checking.txt оказываются строки и из файла 2.txt, и из файла 1.txt.

Цитата:
***** 1.txt
33: time_base=1/90000
34: start_pts=0
35: start_time=0.000000
36: duration_ts=274777200
37: duration=3053.080000
38: bit_rate=1167100
39: max_bit_rate=N/A
***** 2.TXT
33: time_base=1/90000
34: start_pts=61200
35: start_time=0.680000
36: duration_ts=34682400
37: duration=385.360000
38: bit_rate=1103399
39: max_bit_rate=N/A
Я хочу, чтобы в файле result-of-checking.txt были строки только из файла 2.txt, те строки, которые отличаются от строк файла 1.txt. Как это сделать?

Отправлено: 11:52, 13-04-2021 | #23


Ветеран


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

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


Вывод в 3.txt одинаковых строк из 1.txt и 2.txt
Код: Выделить весь код
@echo off
>"3.txt" findstr /xlg:"2.txt" "1.txt"
pause
Вывод в 3.txt строк из 2.txt, которых нет в 1.txt
Код: Выделить весь код
@echo off
>"3.txt" findstr /vxlg:"1.txt" "2.txt"
pause
Общий
Код: Выделить весь код
@echo off
>>"3.txt" (
 echo Этого нет в "1.txt"
 findstr /vlg:"1.txt" "2.txt"
 echo:
 echo Этого нет в "2.txt"
 findstr /vlg:"2.txt" "1.txt"
)
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 13-04-2021 | #24


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell
Код: Выделить весь код
$a = & ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner -i "C:\temp\1.mp4"
$b = & ffprobe -v 32 -print_format default -show_format -show_streams -hide_banner -i "C:\temp\2.mp4"

(diff $a $b |? SideIndicator -eq '=>').Inputobject |sort > C:\temp\result-of-checking.txt

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 13-04-2021 в 20:16.

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

Отправлено: 19:21, 13-04-2021 | #25


Ветеран


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

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


если на PowerShell, тогда по типу моего "Общий" на cmd
Код: Выделить весь код
$file1 = 'C:\1.txt'
$file2 = 'C:\2.txt'
$fileZ = 'C:\3.txt'

$z = compare $(gc $file1) $(gc $file2)

"Этого нет в $file1"                              >> $fileZ
$z.where({$_.SideIndicator -eq '=>'}).InputObject >> $fileZ
"Этого нет в $file2"                              >> $fileZ
$z.where({$_.SideIndicator -eq '<='}).InputObject >> $fileZ
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:45, 14-04-2021 | #26


Новый участник


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

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


alpap, DJ Mogarych, спасибо. Принял к сведению.

Цитата alpap:
Вывод в 3.txt строк из 2.txt, которых нет в 1.txt »
Код: Выделить весь код
@echo off
>"3.txt" findstr /vxlg:"1.txt" "2.txt"
pause
alpap, как сделать, чтобы строки в файлах 1.txt, 2.txt, 3.txt были пронумерованы?

Отправлено: 15:09, 15-04-2021 | #27


Ветеран


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

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


Цитата Konstantinkn:
чтобы строки в файлах 1.txt, 2.txt, 3.txt были пронумерованы? »
только в "3.txt" и непосредственно найденные строки
Код: Выделить весь код
@echo off
>>"3.txt" (
 echo Этого нет в "1.txt"
 findstr /nvlg:"1.txt" "2.txt"
 echo:
 echo Этого нет в "2.txt"
 findstr /nvlg:"2.txt" "1.txt"
)
pause
иначе - использовать AkelPad, как я или другой "правильный" текстовый редактор
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:30, 16-04-2021 | #28


Новый участник


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

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


alpap, спасибо. Принял к сведению.

Отправлено: 21:16, 16-04-2021 | #29



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление всех пробельных символов в текстовых файлах. serg515 Скриптовые языки администрирования Windows 24 24-10-2020 16:02
[решено] Пакетная замена значений в текстовых файлах Alexandr-Pessimist AutoIt 4 29-09-2018 22:30
CMD/BAT - Удалить определенные строки в текстовых файлах Seryoga204 Скриптовые языки администрирования Windows 0 05-08-2012 14:53
[решено] Как сравнить два текстовых файла и выявить изменения assch AutoIt 1 09-09-2010 23:25
Сортировщик строк в текстовых файлах. borison Программное обеспечение Windows 2 04-02-2007 10:22




 
Переход