新手在此提前致歉。
基本上,我正在尝试尽可能多地自动化我的流程。我希望能够下载分成不同 .ts 部分(大约 150 个部分)的流媒体视频。
出于某种原因,使用 {0..150} 函数循环遍历各个部分对我不起作用,因为它将字符串解释为 URL 的一部分,返回“未找到”错误。 (可能是我正在通过 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 函数的信息,但要么我的语法有误,要么我想不出合并这两个脚本的方法。
有人有什么建议吗?
最佳答案
如果您想从文件中读取 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,第二个是部分的数量。
关于windows - wget 从具有多个部分的多个 URL 下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46459174/