0

我试图创建一个批处理脚本来创建多个 m3u8 清单文件。这是我尝试做的一些伪代码

for (int i= 0; i < numberOfFiles; i++)
{
    write preset lines to file.
    for (int x = i x < i+10; x++)
    {
        write string + x in line to file
    }
    write end of file line to file
}

这就是我到目前为止所拥有的。我遇到了内部 for 循环的问题。我怎样才能让它从 x 运行到 x + 10?

@echo on

setlocal enabledelayedexpansion

set x=0

for /L %%x IN (0,1,5) do (
set file="index%%x.m3u8"

@echo #EXTM3U>>!file!
@echo #EXT-X-TARGETDURATION:10>>!file!
@echo #EXT-X-VERSION:3>>!file!
@echo #EXT-X-MEDIA-SEQUENCE:0>>!file!
@echo #EXT-X-PLAYLIST-TYPE:VOD>>!file!

set n=%x%
for /L %%n IN (n, 1, %x%+10) do (
    @echo #EXTINF:10.00000,>>!file!
    @echo fileSequence!n!.ts>>!file!

)

@echo #EXT-X-ENDLIST>>!file!

)
4

1 回答 1

0

您似乎将环境变量与循环变量混淆了。两者没有任何关系。

尝试对脚本进行以下修改:

@echo on

setlocal enabledelayedexpansion

set x=0

for /L %%x IN (0,1,5) do (
set file="index%%x.m3u8"

@echo #EXTM3U>>!file!
@echo #EXT-X-TARGETDURATION:10>>!file!
@echo #EXT-X-VERSION:3>>!file!
@echo #EXT-X-MEDIA-SEQUENCE:0>>!file!
@echo #EXT-X-PLAYLIST-TYPE:VOD>>!file!

set /a n=%%x+10
for /L %%n IN (%%x, 1, !n!) do (
    @echo #EXTINF:10.00000,>>!file!
    @echo fileSequence%%n.ts>>!file!

)

@echo #EXT-X-ENDLIST>>!file!

)

我不确定为什么要在开头设置 echo ,然后抑制单个echos,但是您可以通过将抑制和重定向应用到块而不是单个命令来稍微简化脚本。特别是,echo主循环中的一系列 s 可以这样重写:

@(
    echo #EXTM3U
    echo #EXT-X-TARGETDURATION:10
    echo #EXT-X-VERSION:3
    echo #EXT-X-MEDIA-SEQUENCE:0
    echo #EXT-X-PLAYLIST-TYPE:VOD
)>>!file!

内部循环的echos 可以以类似的方式转换为块。当然,块内的缩进是可选的。

于 2013-02-19T21:57:56.457 回答