Eu tenho um script em lote que usa um loop for para percorrer arquivos no diretório atual e, em seguida, convertê-los para o mp4 com ffmpeg no diretório pai. Basicamente eu apenas copio todos os arquivos que eu quero converter em um diretório chamado "avi" (o subdiretório) e executo o script .bat. O problema é que tenho alguns arquivos no diretório pai. Quando eu crio novos arquivos avi, eles são chamados de "capture - #. Avi", onde # é um número que começa com 1. Os arquivos convertidos usam o mesmo esquema de nomes, mas são sequenciais. Toda vez que eu crio um novo conjunto de arquivos avi, o # inicia de volta em 1, então quando eu os copio no diretório avi e executo o script em lote, ele tenta sobrescrever os arquivos mp4 existentes no diretório pai. Existe uma maneira de fazer o script em lote obter o nome do arquivo mais recente (número de captura mais alto) do diretório pai e usá-lo para nomear dinamicamente os arquivos de saída, para que não importe o nome do arquivo avi? , quando for convertido, ele sairá como "capture - #. mp4", com os números continuando a partir do que existe no diretório pai?
Por exemplo, no diretório pai, eu tenho 30 arquivos, o mais recente deles é obviamente, "capture-30mp4". Eu copio dois arquivos avi para o diretório avi, chamado "capture-1.avi" e "capture-2.avi", posso fazê-lo para que o script em lote olha no diretório pai e veja o arquivo capture-30.mp4 e renomeia os arquivos avi (como eles são convertidos) para capturar-31.mp4 e capture-32.mp4 automaticamente?
Eu tentei fazer isso:
for %I in (../*.mp4) do SET _file=%I
Mas a variável _file foi definida como capture_9.mp4, presumivelmente porque o sistema de ordenação não é uma ordenação natural, então considera 9 ser maior que 30 (porque 9 > 3). Eu tentei enrolar todo o loop for entre parênteses e adicionando | ordenar no final, mas isso não mudou nada.