我正在尝试编写一个批处理程序,它将搜索目录树并查找无法播放的视频文件并将其删除。一切似乎都运行正常,我运行ffmpeg并将其输出发送到txt文件。当我从txt文件中读取时,它第一次工作正常。第一个之后的所有读取都不正确,似乎复制了上一次读取的结果。
@echo off
setlocal enabledelayedexpansion
set ext=.avi .mkv .mp4
for /R %%i in (*.*) do (
for %%a in (%ext%) do (
if "%%a" == "%%~xi" (
echo found video file "%%i", scanning integrity...
ffmpeg.exe -v error -i "%%i" -f null - >output.txt 2>&1
set /p error= < output.txt
if "!error!" == "" (
echo +video is good
) else (
echo -video is bad... deleting it
echo "(delete here)"
)
)
)
)
pause
通过所有已经指出的事情,我已经能够大大简化我的代码:
@echo off
setlocal enabledelayedexpansion
for /R %%i in (*.avi *.mkv *.mp4) do (
echo found video file "%%i", scanning integrity...
ffmpeg.exe -v error -i "%%i" -f null -
if "!errorlevel!" == "0" (
echo +video is good
) else (
echo -video is bad... deleting it
echo "(delete here)"
)
)
pause
答案 0 :(得分:1)
由于重现问题并不容易,我建议
ffmpeg.exe -v error -i "%%i" -f null - >output.txt 2>&1
SET "ERROR="
set /p error= < output.txt
set /p
的问题是没有输入会使变量保持不变,它不会设置为 nothing 。< / p>
?你在errorlevel
之后检查了ffmpeg
的值吗?如果遵循规则,errorlevel
成功时应为0
,出错时应为非0。