Como posso excluir automaticamente a versão MP4 de um arquivo se existir uma versão MKV?

0

Meu host upstream mudou a forma como eles enviam arquivos de vídeo e agora tenho dúzias de pastas que contêm tanto uma versão MP4 quanto uma versão MKV do mesmo arquivo. Eu quero manter o arquivo MKV de maior qualidade e excluir a versão MP4, mas há muitas coisas para fazer à mão, além disso, é provável que isso continue sendo recorrente até que eu o endireite.

Então, eu gostaria de executar um script / arquivo em lote que basicamente analisa recursivamente todos os subdiretórios dentro do diretório em que eu o executo, diz if exist <filename>.mkv, delete <filename>.* unless <filename>.nfo

Os arquivos estão em um NAS alimentado por Unraid, então eu posso usar ssh e usar o Linux diretamente na caixa, ou eu posso usar uma máquina Ubuntu ou Windows para fazer isso através do compartilhamento de rede, então eu sou bastante flexível em onde / como isso é executado.

Agradeço antecipadamente por qualquer ajuda sobre isso. Eu tenho arrancado meu cabelo, pesquisando para ver se consigo encontrar a solução, mas chegando vazia.

    
por VideoEnthusiast 16.11.2013 / 15:55

1 resposta

1

Coloque o seguinte em um arquivo .cmd (ou arquivo .bat) e execute-o no diretório raiz / base de onde deseja iniciar a verificação e exclusão dos arquivos de vídeo duplicados.

O script excluirá todos os arquivos que tiverem o mesmo nome de arquivo que um arquivo .mkv no mesmo diretório. Mas, ele não excluirá nenhum arquivo .nfo.

Além disso, o script está aplicando o mesmo procedimento a todos os subdiretórios de forma recursiva.

Observe o uso de setlocal . O script faz uso da expansão de variável de ambiente atrasada. No entanto, isso tem o problema de engolir marcas de exlamação que podem fazer parte do conteúdo de uma variável. Para evitar essa eliminação indesejada de pontos de exclamação, a expansão da variável de ambiente atrasada é ativada somente quando necessário.

@echo off
setlocal enableextensions disabledelayedexpansion

echo Processing directory: "%CD%"

rem The outer for-loop goes through all ".mkv" files in the current folder.
rem The inner for-loop goes through all files with the same base file name
rem as the ".mkv" file and deletes them if its file extension is
rem neither ".mkv" nor ".nfo".

for %%i in (*.mkv) do (
    set BaseFileName=%%~ni

    setlocal enabledelayedexpansion

    for %%j in ("!BaseFileName!.*") do (
        set FileExtension=%%~xj
        if /i {!FileExtension!} neq {.mkv} if /i {!FileExtension!} neq {.nfo} (

            setlocal disabledelayedexpansion

            echo Deleting %%j
            del /q /f "%%j"

            endlocal
        )
    )

    endlocal
)

rem This for-loop is responsible for the recursion into sub directories.

set BatchFileAbsolutePath=%~df0
for /d %%i in (*.*) do (
    pushd "%%i"
    call "%BatchFileAbsolutePath%"
    popd
)
    
por 16.11.2013 / 17:20