Могу ли я предположить, что все файлы, которые вы хотите проверить, являются .mkv
?
Вы можете зациклить файлы в их папках, используя цикл For /R
для зацикливания файлов в C: \ Media и любой другойподкаталоги.
было бы намного проще просто переместить файлы в каталоги, соответствующие любому возвращаемому языку, поэтому eng
вместо english
.
Если вам нужно иметь полныйимена для какого-то другого кода, было бы проще всего просто MKLINK /J "C\Media\English" "C\Media\Eng"
вручную для всех языков, для которых вам нужны эти полные имена.
Вы можете запустить это непосредственно в CMD Prompt, вставив его в:
FOR /R "C:\Media\" %_ IN (*.mkv) DO @(
ECHO. Checking: %~f_
ECHO. Running [ffprobe.exe "%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of compact=p=0:nk=1]
FOR /F "Tokens=2 Delims=|" %A IN ('
ffprobe.exe "%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of compact=p=0:nk=1
') DO @(
ECHO. FOR /F Loop returned [%A]
IF NOT EXIST "C:\Media\%A" (
MD "C:\Media\%A" )
ECHO. Moving "%~f_" TO: "C:\Media\%A\%~nx_"
MOVE /Y "%~f_" "C:\Media\%A\%~nx_"
)
)
Кроме того, как я могу запустить его все время, чтобы, когда какой-либо медиа-файл находился в этой папке, он автоматически перемещался?
Настройка запланированной задачи с помощью планировщика задач,и запускать скрипт каждые X минут, также убедитесь, что вы задали задачу не выполняющейся, если предыдущая команда все еще выполнялась, и наложили ограничение на продолжительность ее выполнения, может быть, 30 минут.
Всегда использовать«Новая задача» не «Новая базовая задача», установите флажок «Запускать с наивысшими привилегиями» и выберите самую последнюю версию окон, доступных в раскрывающемся списке.
REM Script: SortMKVs.cmd
@( SETLOCAL
ECHO OFF
)
FOR /R "C:\Media\" %%_ IN (*.mkv) DO @(
ECHO. Checking: %%~f_
ECHO. Running [ffprobe.exe "%%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of compact=p=0:nk=1]
FOR /F "Tokens=2 Delims=|" %%A IN ('
ffprobe.exe "%%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of compact=p=0:nk=1
') DO (
ECHO. FOR /F Loop returned [%%A]
IF NOT EXIST "C:\Media\%%A" (
MD "C:\Media\%%A" )
ECHO. Moving "%%~f_" TO: "C:\Media\%%A\%%~nx_"
MOVE /Y "%%~f_" "C:\Media\%%A\%%~nx_"
)
)
( ENDLOCAL
GOTO :EOF
)
Редактировать метод прямого тестирования v2:
FOR /R "C:\Media\" %_ IN (*.mkv) DO @(
ECHO. Checking: %~f_
ECHO. Running [ffprobe.exe "%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of csv=p=0]
ECHO.
ECHO.===========
ffprobe.exe "%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of csv=p=0
ECHO.===========
ECHO.
FOR /F "Tokens=*" %A IN ('
ffprobe.exe "%~f_" -show_entries stream=index:stream_tags=language -select_streams 1 -v 0 -of csv=p=0
') DO @(
ECHO. FOR /F Loop returned
ECHO. "%A"
IF NOT EXIST "C:\Media\%A" (
REM MD "C:\Media\%A" )
ECHO. Moving "%~f_" TO: "C:\Media\%A\%~nx_"
REM MOVE /Y "%~f_" "C:\Media\%A\%~nx_"
)
)