No momento, estou tentando compactar todos os meus arquivos de vídeo (entre 30 GB e 500 GB) e descobri uma maneira de fazer o arquivo em lote executá-lo para todos os meus arquivos em uma pasta, mas ele continua me dando de volta ' this file already exists overwrite?[y/N]
' no entanto, mesmo se eu pressionar sim (de qualquer forma, estarei excluindo os arquivos originais), ele não me permitirá fazer isso, pois não pode gravar em um arquivo do mesmo arquivo. Atualmente, tenho isso como meu código
@echo off
set 0=compressed
for %%i in (*.mkv, *.mp4, *.mov) do ffmpeg -i "%%i" -vcodec libx265 -crf 24 "%%i%0.mp4"
embora quando eu tiver %%i.mp4
ou %%~ni.mp4
não mudará o nome de saída para qualquer outra coisa. no entanto, preciso disso
também como uma pergunta secundária, como posso fazer o ffmpeg ver subpastas também e não apenas a pasta em que ele está?
Você está usando
%0
como uma variável, mas no script em lote,%0
é interpretado como o nome do próprio arquivo em lote, incluindo o caminho, se fornecido.Evite usar números para nomes de variáveis.
%0
,%1
,%2
,, etc., são tratados como argumentos:%0
refere-se ao arquivo Batch, enquanto%1
,%2
, etc., refere-se ao argumento #1, #2, e assim por diante. Evite usar números como nomes de variáveis, e também evite criar nomes de variáveis que comecem com números.Sobre o uso de expansão para nomes de arquivo em um loop:
"%%~ni%_x%.mp4"
expande%%~ni
para o nome do arquivo sem a extensão, acrescentando o valor de%_x%
e o.mp4
.Conheça e utilize
Parameter Extensions
corretamente...For /Recursively
Consulte o material postado nos links.
Set /?
For /?
For /R /?
Um índice AZ de comandos CMD do Windows em ss64.com