这个批处理脚本从%folder%
using创建一个文件列表%wildcards%
,然后在驱动器上创建一个镜像目录,其中包含c:
每个文件的 txt 版本every file.mkv.txt
,其中包含原始文件的数据,如path-to-file/duration/size
.
setLocal enableDelayedExpansion
:: adder fails with filenames with ampersand "&". investigate
for /f "delims=" %%v in ('dir "%folder%\%wildcards%" /b /s /a-d 2^>nul') do (
if not exist "c:%%~pv" mkdir "c:%%~pv"
if not exist "c:%%~pnxv.txt" for /f "usebackq tokens=2 delims=," %%i in ('"%ffprobe%" -v quiet -show_entries "format=duration" -of csv "%%v"') do (
rem record path-to-file/duration/size into mirror files
echo %%v/%%i/%%~zv>"c:%%~pnxv.txt"
)
)
在某些文件上成功而在其他文件上失败,我认为它与执行到文件,
的部分中的逗号有关。看起来我需要使用逗号作为分隔符,因为持续时间的格式类似于. 自从我开始需要变量的引号(ffprobe.exe 的路径在哪里)以来,这停止了工作。ffprobe
%%v
format,94.436000
%ffprobe%
我认为这与
,
ffprobe 执行到文件 %%v 的部分中的逗号 ( ) 有关:只需尝试添加命令
2>&1
。 也替换为:ffprob
echo string,with &, and commas
echo+ & <nul set /p .="Str,ing,s with & and com,mas" >>file
观察者:关于同一件事:
2>nul mkdir folder
vsif not exist folder (create)do not do(ignore)
...通过使用
mkdir folder
,您可以创建文件夹,如果它在一个操作中不存在,在一个已经存在/不创建一个,它只是返回一个警告/消息通知存在,它不是崩溃/灾难。这是一个对循环/bat运行没有有效影响的动作,只需要一个命令,在没有必要的情况下对可能的不执行进行适当的预测处理
[ run (if folder exists warning) omit ] and continue
......,由于省略错误/警告而完全没问题2>nul mkdir Folder_If_Or_Not_Exist & continue