Wie kann ich die MP4-Version einer Datei automatisch löschen, wenn eine MKV-Version vorhanden ist?


0

Mein Upstream-Host hat die Art und Weise geändert, wie Videodateien gesendet werden, und ich habe jetzt Dutzende von Ordnern, die sowohl eine MP4- als auch eine MKV-Version derselben Datei enthalten. Ich möchte die qualitativ hochwertigere MKV-Datei behalten und die MP4-Version löschen, aber es sind zu viele Dateien vorhanden, die von Hand bearbeitet werden können, und es ist wahrscheinlich, dass dies so lange wiederholt wird, bis ich das Problem behoben habe.

Daher möchte ich eine Skript- / Batch-Datei ausführen, die im Grunde rekursiv alle Unterverzeichnisse in dem Verzeichnis durchsucht, in dem ich sie ausgeführt habe if exist <filename>.mkv, delete <filename>.* unless <filename>.nfo

Die Dateien befinden sich auf einem NAS von Unraid, so dass ich Linux direkt auf der Box einspielen und verwenden kann, oder ich kann entweder einen Ubuntu- oder Windows-Computer verwenden, um dies über die Netzwerkfreigabe zu tun, also bin ich ziemlich flexibel, wo / wie das läuft.

Vielen Dank im Voraus für jede Unterstützung. Ich habe mir die Haare ausgerissen, habe gegoogelt, um zu sehen, ob ich die Lösung finde, aber leer herausgekommen bin.


Müssen sich mkv und mp4 im selben Ordner befinden und möchten Sie alle Dateien mit demselben Basisdateinamen löschen (außer .mkv und .nfo)?

Ja und ja. Die beiden Dateien mkv und mp4 befinden sich immer im selben Ordner. Denken Sie \\ tv \ tvshowname \ seasonx \ individualshowname - sie werden in "seasonx" sein.
Video-Enthusiast

Oh, und die Idee hinter "delete <filename>. *", Es sei denn, <filename> .nfo "ist für den Fall, dass es sich nicht um einen MP4 handelt, der der Betrüger ist, sondern um ein AVI. Das passiert, wenn auch selten. Andernfalls würde ein 'delete <filename> .mp4' funktionieren.
VideoEnthusiast

Jetzt bin ich verwirrt. Welche Verbindung besteht zwischen einer .avi-Datei und einer .nfo-Datei, und wie wichtig ist es für das, was Sie tun möchten?

Wollen Sie keine Duplikate löschen, wenn eine .nfo-Datei vorhanden ist?

Antworten:


1

Fügen Sie Folgendes in eine CMD-Datei (oder eine BAT-Datei) ein und führen Sie sie im Stammverzeichnis / Basisverzeichnis aus, von dem aus Sie nach doppelten Videodateien suchen und diese löschen möchten.

Das Skript löscht alle Dateien, die denselben Dateinamen wie eine MKV-Datei im selben Verzeichnis haben. Es werden jedoch keine .nfo-Dateien gelöscht.

Darüber hinaus wendet das Skript dieselbe Prozedur rekursiv auf alle Unterverzeichnisse an.

Beachten Sie die Verwendung von setlocal. Das Skript verwendet eine verzögerte Erweiterung der Umgebungsvariablen. Dies hat jedoch das Problem, dass Ausrufezeichen verschluckt werden, die Teil des Inhalts einer Variablen sein können. Um dieses unerwünschte Entfernen von Ausrufezeichen zu verhindern, wird die verzögerte Erweiterung von Umgebungsvariablen nur bei Bedarf aktiviert.

@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
)

Ich habe es in einem Unterordner zum Testen abgelegt und es test.bat genannt. Es wurde die folgende Fehlermeldung angezeigt: <br/> Z: \ TestFolder> test.bat Verarbeitungsverzeichnis: Z: \ TestFolder 'test' wird nicht als intern erkannt oder externer Befehl, ausführbares Programm oder Batch-Datei. <br/> Ich verwende Windows7SP1 (64-Bit) und habe der Freigabe (\\ tv) ein Netzwerklaufwerk (Z :) zugeordnet, um den Test auszuführen. Fehlt mir eine Voraussetzung?
Video-Enthusiast

... Was ist die Fehlermeldung? Außerdem, welche Windows-Version verwenden Sie und in welchen absoluten Pfad des "Unterordners" haben Sie es abgelegt?

Leider nicht an diesen Editor gewöhnt. Versucht zu bearbeiten, um dies zu sagen: Ich habe es in einen Unterordner zum Testen abgelegt, ihn test.bat genannt und diese Fehlermeldung erhalten: Z: \ TestFolder> test.bat Verarbeitungsverzeichnis: Z: \ TestFolder 'test' wird nicht erkannt als interner oder externer Befehl, ausführbares Programm oder Batch-Datei. Ich arbeite unter Windows 7SP1 (64-Bit) und habe der Freigabe (\\ tv) ein Netzlaufwerk (Z :) zugeordnet, um den Test auszuführen. Fehlt mir eine Voraussetzung?
Video-Enthusiast

Argh, WTH kann ich die Formatierung nicht zum Laufen bringen? Das tut mir leid.
Video-Enthusiast

Nein, es ist okay, ich verstehe alles. Seltsamerweise funktioniert es hier. Lassen Sie mich überprüfen, wie es sich verhält, wenn es von einem Stammverzeichnis aus gestartet wird (wie in Ihrem Fall).
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.