【问题标题】:wget Download multiple files from multiple URLs with multiple partswget 从具有多个部分的多个 URL 下载多个文件
【发布时间】:2017-09-28 00:36:53
【问题描述】:

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

基本上,我正在尝试尽可能多地自动化我的流程。我希望能够下载分成不同 .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 个 URL。

我阅读了有关 wget 的 -i 函数的信息,但要么我的语法错误,要么我无法找到合并 2 个脚本的方法。

有人有什么建议吗?

【问题讨论】:

  • 不,您将无法将 wget -i 选项与 FOR /L 命令一起使用。

标签: windows batch-file download wget


【解决方案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!
    )
)

如果您还想从文件中读取部分的数量,您可以将文件中的每一行作为 url 和由空格或制表符分隔的部分数量(这没关系,因为 url 不包含空格和制表符) 然后像这样更改您的脚本:

@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,第二个是部分数。

【讨论】:

  • 为什么要使用延迟扩展?你可以做echo %%a%%x.ts
  • 我这样做是因为 OP 做到了 - 我对 OP 的代码进行了最少的更改,这样更改的内容就很明显了。但你是对的:除了 for 循环中的变量之外,你不需要任何变量。
  • 诚然,我不太确定延迟扩展的目的是什么。为了更好地适应我的情况,我对找到的代码进行了一些更改并将其留在那里,因为我不知道是否有必要。
  • @LPMA 延迟扩展的目的是默认情况下,当从批处理文件中读取代码行时,每个环境变量(不是循环变量)都设置为其最终值 - 这不会t 适用于 for 循环,因为您在每次迭代期间都需要不同的值。 Squashman 的意思是你不需要任何这些环境变量——你可以直接使用 for 循环变量(拥有它们的唯一原因是将它们回显到屏幕上以进行调试)我将编辑答案。
  • 新代码完美运行。是否有理由将 echo 命令留在最后一行,它会生成要获取的文件列表但实际上并没有让 wget 下载它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
相关资源
最近更新 更多