2013-06-23 1 views
3

Я хотел бы переименовать свои видеофайлы в соответствии с разрешением, в котором они находятся, e, g для видео «bla bla.mp4» в 1080p, я бы хотел переименовать его к «бла-бла» [H.264 1080p]. Сценарий должен автоматически обнаруживать разрешение видео, а также если файл уже переименован, он не должен переименовывать его. Мне не удалось найти способ проверить разрешение, поэтому я попытался использовать это для 1080p файлов:Переименование моих видеофайлов согласно разрешению с помощью партии

FOR /r %%a in (*.mp4) DO (IF EXIST *[H.264*.mp4 (
    ECHO Already done) 
    ELSE (
    REN "%%~a" "%%~na [H.264 1080p].mp4")) 

Но что она делает это он проверяет тот же файл снова и снова, который уже был переименован и, следовательно, ответ всегда будет «уже сделано».

ответ

3

Этот вопрос выходит за рамки понятия SO вопроса. Тем не менее я отвечу на него, потому что сегодня воскресенье.

  • загрузить и установить версию командной строки
  • добавить путь к mediainfo двоичным файлам в вашу систему или пользователь PATH переменные окружения
  • скопировать сценарий переименования, замените путь к папке видео, есть безопасность echo перед командой rename, удалите ее, если результат выглядит хорошо
  • тесты сценариев для уже существующих и уже обработанные файлы (предложенный Питером Райтом)

переименовать скрипт:

@echo off & setlocal 
cd X:\video\path 
for /f "delims=" %%i in ('dir /b /a-d *.mp4') do (
    set "fnameo=%%~ni" 
    set "fnamee=%%~xi" 
    set "Height=" 
    for /f "delims=" %%j in ('mediainfo "--Inform=Video;%%Height%%" "%%~i"') do set "Height=%%j" 
    setlocal enabledelayedexpansion 
    call set "selftest=%%fnameo:[H.264 !Height!p]=%%" 
    if "!selftest!" equ "!fnameo!" if not exist "!fnameo! [H.264 !Height!p]!fnamee!" (
     echo rename "!fnameo!!fnamee!" "!fnameo! [H.264 !Height!p]!fnamee!" 
    ) 
    endlocal 
) 

выход Пример:.

 
rename "Handbrake.0.9.8.mp4" "Handbrake.0.9.8 [H.264 800p].mp4" 
rename "Hybrid.2012.10.21.1.mp4" "Hybrid.2012.10.21.1 [H.264 800p].mp4" 
rename "Womble.mp4" "Womble [H.264 1080p].mp4" 
+1

Я предлагаю вам отфильтровать имена файлов вида '" * [*] mp4 «иначе вы будете переименовывать уже обработанные файлы, которые существовали до того, как выполняется' dir'. Очевидным инструментом будет 'findstr' - но с завихрением, так как требуемая маска содержит важные символы, поскольку устанавливается соответствующее регулярное выражение ... :) – Magoo

+0

@PeterWright спасибо, это хорошая идея. Я посмотрю на моего друга 'findstr' :) – Endoro

+0

Спасибо тонну! Хотя это решает мою проблему с переименованием файлов в соответствии с разрешением, он снова переименовывает файлы, которые уже переименованы? Любое решение? –

0

Условие IF EXIST условно будет проходить после первого переименования файла, поскольку в его записи будет проверяться наличие любого файла в каталоге, который содержит «[H.264» в имени файла, а не только %% а.

Проконсультируйтесь с Batch file: Find if substring is in string (not in a file), чтобы узнать, как найти «[H.264» в %% a, что приведет к предполагаемому результату.

1

Был очень похожий вопрос здесь: Windows batch file renames filename unexplainably in FOR loop

Питер Райт опубликовал решение с очень хорошим объяснением:

Try

для/ф "delims =" %% a in ('dir/b/ad * .mp3') do (проблема заключается в том, что ваш исходный синтаксис находит следующее имя файла - которое находит ваш переименованный файл , так как новое имя файла (с префиксом) логически «больше, чем старый».

Использование dir строит список имен файлов и обрабатывает список после его полного создания - следовательно, список не меняется, поскольку файлы переименованы.

«delims =» статья гарантирует, что синтаксический по умолчанию имя файла неэффективен - в противном случае, имя файла будет интерпретироваться как ряд [пробел] лексем .

ответил 20 июня в 4:28 Питер Райт

 Смежные вопросы

  • Нет связанных вопросов^_^