Estou tentando criar um arquivo em lote que usará mkvpropedit
e removerá todas as tags de todos os arquivos mkv dentro de um diretório. Até agora consegui isso:
@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
Porém, ao usar a Y
opção a janela simplesmente fecha – mesmo em um diretório cheio de .mkv
arquivos.
Qualquer ajuda seria muito apreciada, obrigado pela leitura.
Responder1
Tente assim:
FOR %%G IN (*.mkv) DO mkvpropedit "%%G" --tags all: -d title --delete-attachment 1
Nota: % duplo é necessário para variáveis dentro de arquivos em lote (veja:https://stackoverflow.com/questions/14509652/what-is-the-difference-between-and-in-a-cmd-file)
Responder2
Usei isso na linha de comando do Windows com WSL bash: Windows/WSL/bash/
find . -name "*.mkv" -exec bash -c 'for f; do mkvpropedit --tags all: "${f%.*}.mkv" ; done' -- {} +
A primeira parte, até -exec, lê e armazena uma lista de arquivos mp4. O -exec bash -c executará uma linha de comando bash. Do "for f" ao próximo ponto e vírgula há um loop for que chama mkvpropedit para excluir todas as tags no arquivo mkv na iteração atual do loop. "pronto" encerra o loop. O -- sinaliza o fim das opções. "Dentro do comando interno o {} representa a expansão do parâmetro. Em inglês, significa "insira o nome do arquivo encontrado aqui". "
Nota mkvtoolnix deve estar instalado: "apt install mkvtoolnix""."
Observe que isso também funciona nos subdiretórios.