gpt4 book ai didi

for-loop - 如何在另一个命令之后在批处理脚本中删除 FOR 循环中的文件?

转载 作者:行者123 更新时间:2023-12-04 23:12:09 33 4
gpt4 key购买 nike

我通过带有 FOR LOOP 的批处理脚本单线来压缩带有 FFMPEG 的视频。压缩后我想删除原始文件。
这段代码完美地完成了压缩工作,但原始文件没有被删除:

for %%i in (*.mp4) do ffmpeg -i "%%i" -vcodec libx265 -crf 28 "%%~ni"-small.mp4&&del "%%i"
pause
我错过了什么?
顺便说一句,对于占用您硬盘的任何类型的教育视频、教程等来说,这都是一个近乎完美的压缩比。

最佳答案

我认为这种方法会更好地为您服务:

@For /F "EOL=? Delims=" %%G In ('Dir /B /A:-D "*.mp4" ^| ^
"%__AppDir__%findstr.exe" /IR "\.mp4$" ^| ^
"%__AppDir__%findstr.exe" /IRV "\-small\.mp4$"'
) Do @If Not Exist "%%~nG-small%%~xG" (
ffmpeg.exe -i "%%G" -vcodec libx265 -crf 28 "%%~nG-small%%~xG"
If Not ErrorLevel 1 If Exist "%%~nG-small%%~xG" Del /A /F "%%G")
我们的想法是使用 .mp4 获取所有文件的目录列表。扩大。使用第一个 findstr排除与短名称 (8.3) 匹配的任何文件。然后它通过另一个 findstr搜索,排除任何已经有 -small 的文件附加到他们的基本名称。接下来,它检查以确保该目录中没有现有文件,具有相同的基本名称加上 -small。 basename 后缀,(防止可能的覆盖)。如果所有这些都通过, ffmpeg.exe应该被调用,(取决于 ffmpeg.exe 在当前目录中,在 %PATH% 内,或者在注册表中注册为可执行文件)。转换完成后,脚本会检查返回的 ErrorLevel小于 1 , (以确保它成功),如果是,则新文件(带有 -small 基本名称后缀)是否存在。如果是这样,它将继续删除,使用 Del命令。
如果您想使用条件运算符而不是 ErrorLevel 再次尝试它,那么它看起来像这样:
@For /F "EOL=? Delims=" %%G In ('Dir /B /A:-D "*.mp4" ^| ^
"%__AppDir__%findstr.exe" /IR "\.mp4$" ^| ^
"%__AppDir__%findstr.exe" /IRV "\-small\.mp4$"'
) Do @If Not Exist "%%~nG-small%%~xG" (
ffmpeg.exe -i "%%G" -vcodec libx265 -crf 28 "%%~nG-small%%~xG" && (
If Exist "%%~nG-small%%~xG" Del /A /F "%%G"))

关于for-loop - 如何在另一个命令之后在批处理脚本中删除 FOR 循环中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64140059/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com