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 #EXTM3U
    echo #EXT-X-TARGETDURATION:10
    echo #EXT-X-VERSION:3
    echo #EXT-X-MEDIA-SEQUENCE:0
    echo #EXT-X-PLAYLIST-TYPE:VOD
)>>!file!

内側のループechoは、同様の方法でブロックに変換できます。もちろん、ブロック内のインデントはオプションです。

于 2013-02-19T21:57:56.457 に答える