cmd批处理文件;从文本文件中分配不同的参数

时间:2017-04-02 08:07:40

标签: batch-file

我有一个带有可变行数的文本文件(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}}是一个取自文本​​文件的变量。

非常感谢任何帮助。

2 个答案:

答案 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

从文件中获取扩展程序