我有一个带有可变行数的文本文件(trimlist.txt),但每行与变量文件路径和名称相似,2个数字用逗号分隔:
E:\test\00037_20161001_100956.mov,3.6369666,1.2345666
我需要从每一行获得3个不同的变量:mov,3.6369666&在这个例子中是1.2345666。 我可以得到像这样的最后两个变量
set prevfile=
for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
if "%%F"=="!prevfile!" (
if "!counter!"=="" (set counter=1) else (set /a counter+=1)
) else (
set counter=
set "prevfile=%%F"
)
ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF!counter!-trimmed.mov"
因此,使用上面的文本文件,我的最终命令将是
ffmpeg -ss 3.6369666 -i "E:\test\00037_20161001_100956.mov" -c copy -t 1.2345666 "E:\test\00037_20161001_100956 01 -trimmed.mov"
我希望"mov"
的{{1}}是一个取自文本文件的变量。
非常感谢任何帮助。
答案 0 :(得分:1)
尝试添加
echo %%~xF
进入你的外环。
目前还不清楚实际上想要做什么 - 只需要一个输出元素的示例,也许它会更容易帮助。
set "prevfile="
set "counter="
for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
if "%%F"=="!prevfile!" (
if not defined counter set /a counter=10000
set /a counter+=1
) else (
set "counter="
set "prevfile=%%F"
)
if defined counter (ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF-trimmed%%~xF"
) else (
ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF !counter:~-2! -trimmed%%~xF"
)
我认为这应该适合。
注意:语法SET "var=value"
(其中value可能为空)用于确保任何杂散尾随空格不包含在分配的值中。 set /a
可以安全地使用"无报"。
set var+=1
未定义, 1
会很乐意将var
分配给var
。
由于定义counter
时,您需要在destination-filename中填充前导零值的任一侧使用空格,最简单的方法是将counter
初始化为当您希望开始计数时,以' 00' 结尾的数字> 100;然后选择字符串的最后两个字符。
答案 1 :(得分:0)
终于找到了怎么做
setlocal enableDelayedExpansion
set prevfile=
for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
if "%%F"=="!prevfile!" (
if "!counter!"=="" (set counter=1) else (set /a counter+=1)
) else (
set counter=
set "prevfile=%%F"
)
ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF!counter!-trimmed%%~xF"
)
我只需要使用%%~xF