MKVバージョンが存在する場合、ファイルのMP4バージョンを自動的に削除するにはどうすればよいですか?


0

私のアップストリームホストはビデオファイルの送信方法を変更し、同じファイルのMP4バージョンとMKVバージョンの両方を含む多数のフォルダーを持っています。高品質のMKVファイルを保持し、MP4バージョンを削除したいのですが、手作業で行うことは多すぎます。さらに、修正するまでこれが繰り返される可能性があります。

だから、私はそれを実行するディレクトリ内のすべてのサブディレクトリを基本的に再帰的に調べるスクリプト/バッチファイルを実行したいと言います if exist <filename>.mkv, delete <filename>.* unless <filename>.nfo

ファイルはUnraidを搭載したNASにあるため、ボックスに直接sshしてLinuxを使用するか、UbuntuまたはWindowsマシンを使用してネットワーク共有経由で実行することができるため、どこで/これの実行方法。

これに関する支援を事前にありがとうございます。私は髪を切り取って、グーグルで解決策を見つけることができるかどうかを確認しますが、空になります。


mkvとmp4は同じフォルダーにあるはずですが、同じベースファイル名(.mkvと.nfoを除く)を持つすべてのファイルを削除ますか?

はい、はい。mkvとmp4の2つのファイルは常に同じフォルダー内にあります。\\ tv \ tvshowname \ seasonx \ individualshownameと考えてください。これらは「seasonx」の中にあります。
VideoEnthusiast

ああ、「<filename> .nfoを除いて<filename>。*を削除」の背後にある考え方は、MP4ではなくAVIの場合です。まれではありますが、それは起こります。それ以外の場合は、「delete <filename> .mp4」が機能します。
VideoEnthusiast

今、私は混乱します。.aviファイルと.nfoファイルの関係は何ですか?また、やりたいことにとってどのように重要ですか?

.nfoファイルが存在する場合、重複を削除したくないということですか?

回答:


1

以下を.cmdファイル(または.batファイル)に入れ、重複ビデオファイルのスキャンと削除を開始するルート/ベースディレクトリで実行します。

スクリプトは、同じディレクトリ内の.mkvファイルと同じファイル名を持つファイルを削除します。ただし、.nfoファイルは削除されません。

さらに、スクリプトは同じ手順をすべてのサブディレクトリに再帰的に適用しています。

の使用法に注意してくださいsetlocal。スクリプトは、遅延環境変数の展開を利用します。ただし、これには、変数のコンテンツの一部である可能性のある感嘆符を飲み込むという問題があります。この感嘆符の不要な削除を防ぐために、遅延環境変数の拡張は必要な場合にのみ有効になります。

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

テストするサブフォルダーにドロップしてtest.batを呼び出し、次のエラーメッセージを取得しました:<br/> Z:\ TestFolder> test.bat処理ディレクトリ:Z:\ TestFolder 'test'は内部として認識されませんまたは外部コマンド、操作可能なプログラムまたはバッチファイル。<br/>私はWindows7SP1、64ビットを使用しており、テストを実行するためにネットワークドライブ(Z :)を共有(\\ tv)にマップしました。前提条件がありませんか?
VideoEnthusiast

...エラーメッセージとは何ですか?また、使用しているWindowsのバージョンと、ドロップした「サブフォルダー」の絶対パスは何ですか?

このエディタには慣れていません。これを言うために編集しようとしました:テストするサブフォルダーにドロップして、test.batと呼び、このエラーメッセージを取得しました:Z:\ TestFolder> test.bat処理ディレクトリ:Z:\ TestFolder 'test'は認識されません内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして。64ビットのWindows7SP1を使用しており、テストを実行するためにネットワークドライブ(Z :)を共有(\\ tv)にマップしました。前提条件がありませんか?
VideoEnthusiast

ああ、WTHはフォーマットを機能させることができませんか?ごめんなさい
VideoEnthusiast

いいえ、大丈夫、要点がわかりました。奇妙なことに、ここで動作します。ルートディレクトリから起動したときの動作を確認しましょう(あなたの場合のように)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.