Массовое удаление метаданных MKV — пакетный скрипт

Массовое удаление метаданных MKV — пакетный скрипт

Я пытаюсь создать пакетный файл, который будет использовать mkvpropeditи удалять все теги из всех файлов mkv в каталоге. Пока мне удалось получить следующее:

@ECHO OFF
TITLE MKV Metadata Remover
ECHO.
ECHO This program executes MKVPropedit to remove all metadata from all mkv 
files in the current directory.
ECHO.

:choice
set /P c=Are you sure you want to continue[Y/N]?
if /I "%c%" EQU "Y" goto :somewhere
if /I "%c%" EQU "N" goto :somewhere_else
goto :choice


:somewhere

FOR /F "tokens=*" %G IN ('dir /b *.mkv') DO mkvpropedit "%G" --tags all: -d 
title --delete-attachment "1" 
pause 
exit

:somewhere_else

ECHO Closing program...
pause
exit

Однако при использовании этой Yопции окно просто закрывается — даже в каталоге, полном .mkvфайлов.

Любая помощь будет высоко оценена, спасибо за чтение.

решение1

Попробуйте так:

FOR %%G IN (*.mkv) DO mkvpropedit "%%G" --tags all: -d title --delete-attachment 1

Примечание: для переменных внутри пакетных файлов необходимы двойные символы % (см.:https://stackoverflow.com/questions/14509652/какая-разница-между-и-в-cmd-файле)

решение2

Я использовал это из командной строки Windows с WSL bash: Windows/WSL/bash/

find . -name "*.mkv" -exec bash -c 'for f; do mkvpropedit --tags all: "${f%.*}.mkv" ; done' -- {} +

Первая часть, до -exec, считывает и сохраняет список файлов mp4. -exec bash -c выполнит командную строку bash. От "for f" до следующей точки с запятой идет цикл for, который вызывает mkvpropedit для удаления всех тегов в файле mkv в текущей итерации цикла. "done" завершает цикл. -- сигнализирует об окончании параметров. "Во внутренней команде {} представляет собой расширение параметра. На языке pain English это означает "вставьте найденное здесь имя файла". "

Обратите внимание, что mkvtoolnix должен быть установлен: "apt install mkvtoolnix""."

Обратите внимание, что это также работает в подкаталогах.

Связанный контент