我目前正在尝试压缩我的所有视频文件(介于 30GB 和 500GB 之间),并且我找到了一种方法来让批处理文件对文件夹中的所有文件运行它,但它一直返回“ this file already exists overwrite?[y/N]
”,但是即使我按“是”(无论如何我都会删除原始文件),它也不会允许我这样做,因为它无法从同一个文件写入文件。我目前将此作为我的代码
@echo off
set 0=compressed
for %%i in (*.mkv, *.mp4, *.mov) do ffmpeg -i "%%i" -vcodec libx265 -crf 24 "%%i%0.mp4"
尽管当我有%%i.mp4
或%%~ni.mp4
它不会将输出名称更改为其他任何名称。但是我需要它
另外还有一个问题,我怎样才能让 ffmpeg 也看到子文件夹而不仅仅是它所在的文件夹?
您正在使用
%0
变量,但在批处理脚本中,%0
它被解释为批处理文件本身的名称,包括路径(如果提供)。避免使用数字作为变量名。
%0
、%1
、%2
、 等被视为参数:%0
指批处理文件,而%1
、%2
等指参数 #1、#2 等。避免使用数字作为变量名,也避免创建以数字开头的变量名。关于在循环中使用扩展名:
"%%~ni%_x%.mp4"
扩展%%~ni
为不带扩展名的文件名,并附加值%_x%
和.mp4
。了解并
Parameter Extensions
正确使用...For /Recursively
请参阅链接中发布的材料。
Set /?
For /?
For /R /?
ss64.com 上的 Windows CMD 命令 AZ 索引