Estoy intentando crear un archivo por lotes que usará mkvpropedit
y eliminará todas las etiquetas de todos los archivos mkv dentro de un directorio. Hasta ahora he logrado obtener esto:
@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
Sin embargo, cuando se utiliza la Y
opción, la ventana simplemente se cierra, incluso en un directorio lleno de .mkv
archivos.
Cualquier ayuda será muy apreciada, gracias por leer.
Respuesta1
Prueba así:
FOR %%G IN (*.mkv) DO mkvpropedit "%%G" --tags all: -d title --delete-attachment 1
Nota: se necesita el doble de % para las variables dentro de archivos por lotes (consulte:https://stackoverflow.com/questions/14509652/cuál-es-la-diferencia-entre-y-en-un-archivo-cmd)
Respuesta2
Utilicé esto desde la línea de comandos de Windows con WSL bash: Windows/WSL/bash/
find . -name "*.mkv" -exec bash -c 'for f; do mkvpropedit --tags all: "${f%.*}.mkv" ; done' -- {} +
La primera parte, hasta -exec, lee y almacena una lista de archivos mp4. El -exec bash -c ejecutará una línea de comando bash. Desde "for f" hasta el siguiente punto y coma hay un bucle for que llama a mkvpropedit para eliminar todas las etiquetas en el archivo mkv en la iteración actual del bucle. "hecho" finaliza el ciclo. El -- señala el final de las opciones. "Dentro del comando interno, {} representa la expansión del parámetro. En inglés, significa "inserte el nombre del archivo que se encuentra aquí". "
Nota: mkvtoolnix debe estar instalado: "apt install mkvtoolnix""."
Tenga en cuenta que esto también funciona en los subdirectorios.