gpt4 book ai didi

batch-file - Windows 批处理脚本在扫描文件夹中的文件时继续循环

转载 作者:行者123 更新时间:2023-12-04 01:59:34 25 4
gpt4 key购买 nike

我需要将子目录中的所有 MP4 文件转换为 MKV。所以我写了这个脚本:

@ECHO OFF
SET oldName=
SET newName=

FOR /r %%A IN (*.mp4) DO (
SET oldName=%%A
SET newName=%%A
CALL :MAKEMKV
)

:MAKEMKV
SET newName=%newName:mp4=mkv%
IF NOT EXIST %newName% (
START /B /WAIT ffmpeg -i "%oldName%" -map 0 -map -0:s -codec copy "%newName%"
)

问题是文件夹中只有第一个文件被转换然后退出。但是我使用 for do 循环。所以我不明白它为什么退出。

我的结构是:

/FOLDER
../A/filea.mp4
../B/fileb.mp4
../C/filec.mp4

当我运行上面的程序时,我只会将 filea.mp4 转换为 filea.mkv 并退出脚本。
其他文件 fileb.mp4filec.mp4 未被批处理文件转换。

我错过了什么?

最佳答案

在命令提示符窗口中运行 for/? 并阅读几页上的帮助输出。

实际上不需要批处理文件,因为这个任务可以从命令行完成:

for /R %I in (*.mp4) do @if not exist "%~dpnI.mkv" ffmpeg.exe -i "%I" -map 0 -map -0:s -codec copy "%~dpnI.mkv" && del "%%I"

批处理文件中的相同命令行:

@echo off
for /R %%I in (*.mp4) do if not exist "%%~dpnI.mkv" ffmpeg.exe -i "%%I" -map 0 -map -0:s -codec copy "%%~dpnI.mkv" && del "%%I"

我无法回答为什么您的批处理文件失败,因为不知 Prop 有真实文件夹名称和真实文件名称的文件夹结构。但是 Stephan 是正确的 IF NOT EXIST %newName% ( 如果文件名的完整路径包含空格或这些字符之一 &()[]{}^=;! '+,`~ 因为没有被双引号括起来。

注意 && del "%%I" 如果转换成功则删除刚刚转换的 *.mp4 文件和 ffmpeg.exe0 退出通常是成功的退出/返回代码。另请参阅 Single line with multiple commands using Windows batch file

如果再次编写带有子例程的批处理文件,请阅读 Where does GOTO :EOF return to?。有问题的批处理文件在 FOR 循环后遗漏了 goto :EOFexit/B 以避免落入 < strong>FOR 完成了。这在这里不是问题,但通常是不对的。

关于batch-file - Windows 批处理脚本在扫描文件夹中的文件时继续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48248578/

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