1

У меня есть пакетный скрипт, который использует цикл for для перебора файлов в текущем каталоге, а затем конвертирует их в mp4 с помощью ffmpeg в родительский каталог. По сути, я просто копирую все файлы, которые хочу конвертировать, в каталог с именем "avi" (подкаталог) и запускаю скрипт .bat. Дело в том, что у меня довольно много файлов в родительском каталоге. Когда я создаю новые файлы avi, они называются «capture - #. Avi», где # - это число, начинающееся с 1. В преобразованных файлах используется та же схема именования, но она последовательная. Каждый раз, когда я создаю новый набор файлов avi, # начинается с 1, поэтому, когда я копирую их в каталог avi и запускаю пакетный скрипт, он пытается перезаписать существующие файлы mp4 в родительском каталоге. Есть ли способ заставить пакетный скрипт получить имя файла самого последнего (наибольшее число перехвата) из родительского каталога и использовать его для динамического именования выходных файлов, чтобы не имело значения, как называется файл avi?, когда он конвертируется, он будет отображаться как "capture - #. mp4", с номерами, продолжающимися с того, что существует в родительском каталоге?

Например, в родительском каталоге у меня есть 30 файлов, последний из которых, очевидно, «capture-30.mp4». Я копирую два файла avi в каталог avi с именами «capture-1.avi» и «capture-2.avi», могу ли я сделать так, чтобы пакетный скрипт смотрел в родительском каталоге и видел файл capture-30.mp4 и автоматически переименовывает файлы avi (по мере их преобразования) в capture-31.mp4 и capture-32.mp4?

Я пытался сделать это:

for %I in (../*.mp4) do SET _file=%I

Но для переменной _file было установлено значение capture_9.mp4, предположительно потому, что система сортировки не является естественной сортировкой, поэтому она считает 9 больше 30 (потому что 9> 3). Я попытался обернуть весь цикл for в скобках и добавить | сортировать в конце, но это ничего не изменило.

1 ответ1

0

Я бы использовал какой-нибудь кеш-файл, который содержит последний преобразованный номер. При запуске скрипт читает это число и использует его в качестве индекса. В цикле вы также должны проверить, существует ли имя файла в родительском каталоге. Пока это так - попробуйте добавить 1 к счетчику. После окончания цикла сохраните индекс в файл для последующего использования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .