wget从包含多个部分的多个网址下载多个文件

时间:2017-09-28 00:36:54

标签: windows batch-file download wget

在这里完成新手,所以请提前道歉。

基本上,我试图尽可能多地自动化我的过程。我希望能够下载分成不同.ts部分的流媒体视频(大约150个部分)。

出于某种原因,使用{0..150}函数遍历各个部分并不适合我,因为它将字符串解释为URL的一部分,返回Not found错误。 (可能是因为我通过Windows cmd运行wget吗?)挖了一下并且能够找到一个成功下载视频文件的脚本:

 setlocal enabledelayedexpansion
 @echo off
 set directory=https://URLstring/playlist
 for /l %%x in (0, 1, 150) do (
    set tsNum=%%x
    set num=%directory%!tsNum!
    set ts=.ts
    set file=!num!!ts!
    wget !file!
 )

但是,由于每周上传的视频中有10个(每个视频分为150个部分),我希望能够从.txt列表中提取10个网址。

我读到了关于wget的-i函数,但要么我的语法错误,要么我找不到合并这两个脚本的方法。

有人有建议吗?

1 个答案:

答案 0 :(得分:1)

如果要将文件中的URL读入目录变量而不是硬编码目录变量,那么您可以像这样更改脚本:

@echo off
setlocal enabledelayedexpansion
for /f "" %%a in (directory.txt) do (
    set directory=%%a
    for /l %%x in (0, 1, 150) do (
        set tsNum=%%x
        set num=!directory!!tsNum!
        set ts=.ts
        set file=!num!!ts!
        echo wget !file!
    )
)

如果你想从文件中读取部分的数量,你可以让文件中的每一行都是由空格或制表符分隔的网址和部分数量(这是正确的,因为网址不包含空格和标签),然后改变你的脚本:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%a in (directory.txt) do (
    set directory=%%a
    set parts=%%b
    for /l %%x in (0, 1, !parts!) do (
        set tsNum=%%x
        set num=!directory!!tsNum!
        set ts=.ts
        set file=!num!!ts!
        echo wget !file!
    )
)

就像@Squashman所说,没有理由将值存储在环境变量中 - 你可以像这样直接使用for循环变量:

@echo off
for /f "tokens=1,2" %%a in (directory.txt) do (
    for /l %%x in (0, 1, %%b) do (
        echo wget %%a%%x.ts
    )
)

这是我用于测试的directory.txt:

https://URLstring1/playlist 2
https://URLstring2/playlist 3
https://URLstring3/playlist 4

我在每一行使用的第一个值是URL,第二个值是部件数。