我想扫描其路径由用户输入定义的文件夹,最后应用ffmpeg将所有媒体文件信息存储到文本文件中.以下代码不起作用
@echo off
setLocal EnableDelayedExpansion
set /P "path=Enter folder path: "
dir %path% /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt
echo. >info.txt
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a
ffprobe "%path%!in!" 2>>info.txt
)
pause
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除用户输入如下代码确实有效?
@echo off
setLocal EnableDelayedExpansion
::set /P "path=Enter folder path: "
dir d:\Trainers\out\outt\ /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt
echo. >info.txt
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a
ffprobe "d:\Trainers\out\outt\!in!" 2>>info.txt
)
pause
Run Code Online (Sandbox Code Playgroud)
上面的脚本放在包含ffprobe.exe的文件夹中,它在同一目录下成功创建了两个txt文件注意,这d:\Trainers\out\outt\是扫描媒体文件的目录,而不是执行此bat文件的目录ffprobe的基本语法是
ffprobe "videofile"
Run Code Online (Sandbox Code Playgroud)
使用与路径不同的变量名称.
PATH已经做了非常重要的事情.事实上,重要的是,你改变它正是剧本打破的原因.
更具体地说,当您尝试仅使用文件名(根本没有路径)执行程序时,如果在工作目录中找不到该程序,PATH则搜索环境变量的内容.我没有看到你得到的错误信息,但它可能无法执行findstr,这是一个通常在指定的文件夹中找到的可执行文件PATH.