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

Компьютерный форум 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 | Цитировать


Konstantinkn, тогда уж тупо пользовать какой-нибудь WinMerge:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile01=%~1
set sSourceFile02=%~2

if not defined sSourceFile01 (
	echo Usage: "%~nx0" ^<Source file 1^> ^<Source file 2^>
	exit /b 1
) else (
	if not defined sSourceFile02 (
		echo Usage: "%~nx0" ^<Source file 1^> ^<Source file 2^>
		exit /b 1
	) else (
		if not exist "%sSourceFile01%" (
			echo Not found source file [%sSourceFile01%].
			exit /b 2
		) else (
			if not exist "%sSourceFile02%" (
				echo Not found source file [%sSourceFile02%].
				exit /b 2
			)
		)
	)
)

set sPath2FFProbe=%ProgramFiles%\FFmpeg\bin\ffprobe.exe
set sFFProbeParameters=-v 32 -print_format default -show_format -show_streams -hide_banner
set sPath2WinMerge=%ProgramFiles(x86)%\WinMerge\WinMergeU.exe

set sLeftFile=%Temp%\LeftFile.txt
set sRightFile=%Temp%\RightFile.txt
 
>"%sLeftFile%"  "%sPath2FFProbe%" %sFFProbeParameters% "%sSourceFile01%"
>"%sRightFile%" "%sPath2FFProbe%" %sFFProbeParameters% "%sSourceFile02%"

"%sPath2WinMerge%" /e /u /wl /wr /maximize "%sLeftFile%" "%sRightFile%"

>nul del /f /q "%sLeftFile%" "%sRightFile%"

endlocal
exit /b 0

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

Отправлено: 20:08, 24-10-2020 | #2



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

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


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


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

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


Iska, спасибо. Взял в изучение.

Iska, прошу, напишите в коде комментарии.

Отправлено: 11:41, 25-10-2020 | #3


Ветеран


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

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


Konstantinkn, к сожалению, пакетные файлы поддерживают ограниченное комментирование. Но Вы можете спросить, ежели что-то непонятно конкретное.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 25-10-2020 | #4


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


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

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


Цитата Iska:
Konstantinkn, к сожалению, пакетные файлы поддерживают ограниченное комментирование. Но Вы можете спросить, ежели что-то непонятно конкретное. »
Ясно. Спасибо, Iska.

А как сделать, чтобы в дополнение к Вашему решению происходило так:

3. Если все строки совпадают, bat-файл создаёт текстовый файл report.txt, и в нём написано: различий нет.
4. Если какие-либо строки различаются, bat-файл создаёт текстовый файл report.txt, и в нём написано: есть следующие различия: у файла file2.mp4 отличаются следующие строки: и список строк из файла file2.mp4, которые отличаются от строк файла file1.mp4

Отправлено: 17:47, 25-10-2020 | #5


Ветеран


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

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


Konstantinkn, сделать можно. Но не вижу практического смысла.

Отправлено: 22:24, 25-10-2020 | #6


Забанен


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

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


Цитата Iska:
к сожалению, пакетные файлы поддерживают ограниченное комментирование
Konstantinkn, Iska лукавит, ему просто влом расписывать написанное.
Код: Выделить весь код
@echo off
  setlocal
    rem традиционный комментарий
    set "var=переменная" % rem это послестрочный комментарий
    goto:end_comment
       а это многострочный комментарий
       ограниченный инструкцией goto и меткой end_comment
    :end_comment
  endlocal
exit /b

внеблочные комментарии могут быть размещены в любом месте
после инструкции exit /b основного блока
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:42, 25-10-2020 | #7


Ветеран


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

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


greg zakharov, флаг в руки, коллега, флаг в руки . Но лукавите Вы, именуя комментариями то, что ими не является. И Вы сие знаете.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:46, 25-10-2020 | #8


Забанен


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

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


Iska, что именно не является комментарием? Всё приведенное - комментарии, только похоже вы об этом не знали. Жаль, жаль...

Отправлено: 07:46, 26-10-2020 | #9


Аватара для Elven

Ветеран


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

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


greg zakharov, rem или :: предназначены как раз для комментирования, здесь не спорю, а вот насчет других способова - соглашусь с Iska. Это как с холодным оружием: "Является холодным оружием" и "Может быть использовано в качестве холодного оружия" - разные вещи. Так же и тут, обычные строки могут быть использованы в качестве комментария будучи вырезаны из выполнения посредством безусловного перехода или отделены посредством eixt /b, но сами по себе они не являются комментариями. в противном случае нижеприведенный фрагмент тоже можно считать комментарием:

Код: Выделить весь код
echo "Здесь мог быть ваш комментарий" > NUL
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:50, 26-10-2020 | #10



Компьютерный форум 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




 
Переход