FOR 循环仅执行 windows 延迟扩展的批处理文件中的最后一项
FOR loop only executes last item in windows Batch file with delayed expansion
我遇到了与 here 中提到的类似问题,但似乎我做的一切都是正确的,但仍然会发生这种情况。这是我的代码的错误部分,目的是使用 ffmpeg 从一种文件格式转换为另一种文件格式:
set subfolder=converted
set source_ext=.avi
set target_ext=.mov
md %subfolder%
set path=%~dp0
setlocal enabledelayedexpansion
FOR %%I IN ("*!source_ext!") DO (
echo 1 %%I
set this_file=%%I
echo 2 !this_file!
set filename_new=!!this_file:%source_ext%=!!
set output=!path!%subfolder%\!filename_new!!target_ext!)
%ffmpegpath%\ffmpeg.exe -i "!this_file!" -vcodec copy -acodec copy "!output!"
echo CONVERTED !this_file!
)
我正在寻找的输出是这样的:
1 file1.ext
2 file1.ext
CONVERTED file1.ext
1 file2.ext
2 file2.ext
CONVERTED file2.ext
1 file3.ext
2 file3.ext
CONVERTED file3.ext
奇怪的是,我得到的是:
1 file1.ext
2 file1.ext
1 file2.ext
2 file2.ext
1 file3.ext
2 file3.ext
CONVERTED file3.ext
我难住了!
您的错误是由于在 ffmpeg 命令行之前错误地放置了一个右括号。只需删除括号即可解决问题。
您的脚本仅使用延迟扩展来将不必要的命令回显到提示 window,因此我在下面的重写中删除了这些内容。
If Not Exist "%ffmpegpath%\ffmpeg.exe" GoTo :EOF
Set "subfolder=converted"
Set "source_ext=.avi"
Set "target_ext=.mov"
If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0"
If Exist *%source_ext% (
If Not Exist "%subfolder%" MD "%subfolder%"
) Else GoTo :EOF
For %%A In ("*%source_ext%") Do (
"%ffmpegpath%\ffmpeg.exe" -i "%%A" -vcodec copy -acodec copy "%subfolder%\%%~nA%target_ext%"
)
我遇到了与 here 中提到的类似问题,但似乎我做的一切都是正确的,但仍然会发生这种情况。这是我的代码的错误部分,目的是使用 ffmpeg 从一种文件格式转换为另一种文件格式:
set subfolder=converted
set source_ext=.avi
set target_ext=.mov
md %subfolder%
set path=%~dp0
setlocal enabledelayedexpansion
FOR %%I IN ("*!source_ext!") DO (
echo 1 %%I
set this_file=%%I
echo 2 !this_file!
set filename_new=!!this_file:%source_ext%=!!
set output=!path!%subfolder%\!filename_new!!target_ext!)
%ffmpegpath%\ffmpeg.exe -i "!this_file!" -vcodec copy -acodec copy "!output!"
echo CONVERTED !this_file!
)
我正在寻找的输出是这样的:
1 file1.ext
2 file1.ext
CONVERTED file1.ext
1 file2.ext
2 file2.ext
CONVERTED file2.ext
1 file3.ext
2 file3.ext
CONVERTED file3.ext
奇怪的是,我得到的是:
1 file1.ext
2 file1.ext
1 file2.ext
2 file2.ext
1 file3.ext
2 file3.ext
CONVERTED file3.ext
我难住了!
您的错误是由于在 ffmpeg 命令行之前错误地放置了一个右括号。只需删除括号即可解决问题。
您的脚本仅使用延迟扩展来将不必要的命令回显到提示 window,因此我在下面的重写中删除了这些内容。
If Not Exist "%ffmpegpath%\ffmpeg.exe" GoTo :EOF
Set "subfolder=converted"
Set "source_ext=.avi"
Set "target_ext=.mov"
If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0"
If Exist *%source_ext% (
If Not Exist "%subfolder%" MD "%subfolder%"
) Else GoTo :EOF
For %%A In ("*%source_ext%") Do (
"%ffmpegpath%\ffmpeg.exe" -i "%%A" -vcodec copy -acodec copy "%subfolder%\%%~nA%target_ext%"
)