使用命令行/wget 自动下载一系列文件

使用命令行/wget 自动下载一系列文件

我有一个案例,我想触发自动下载每个读者的 114 个文件(朗诵)列表,
例如,如果我想下载名为的读者的朗诵abkr,文件的 URL 将如下所示。

http://server6.mp3quran.net/abkr/001.mp3
http://server6.mp3quran.net/abkr/002.mp3
...
http://server6.mp3quran.net/abkr/113.mp3
http://server6.mp3quran.net/abkr/114.mp3

这些都是古兰经的朗诵,所以它们总共有 114

有没有一种简单的方法可以循环command line使用视窗

答案1

为了完整起见,下面是一个仅批量的解决方案:

@ECHO OFF
SetLocal EnableDelayedExpansion
FOR /L %%G IN (1, 1, 114) DO (
    SET num=%%G
    IF 1!num! LSS 100 SET num=0!num!
    IF 1!num! LSS 200 SET num=0!num!
    wget http://server6.mp3quran.net/abkr/!num!.mp3
)
EndLocal

编辑1:删除了不必要的括号。

编辑2:将计数器起始值修正为 1。

答案2

您没有说明操作系统,但如果您使用 *nix 和 Bash,则以下操作有效:

wget http://server6.mp3quran.net/abkr/{001..114}.mp3

适用于任何 shell 的解决方案:

#!/bin/sh
for i in $(seq -w 1 114); do
    printf 'http://server6.mp3quran.net/abkr/%s.mp3 ' $i
done | xargs wget

或者,如果seq系统中不存在:

#!/bin/sh
i=1
MAX=114
while [ $i -le $MAX ]; do
    printf 'http://server6.mp3quran.net/abkr/%03d.mp3 ' $i
    i=$((i+1))
done | xargs wget

只需将其复制粘贴到 shell 中或保存在脚本文件中并运行它。

答案3

对于 Windows 解决方案,请尝试以下 PowerShell 脚本:

$Client = New-Object System.Net.WebClient
for ($i = 1; $i -le 144; $i++)
{
    $file = [string]::Format("{0:D3}.mp3", $i)
    $Client.DownloadFile("http://server6.mp3quran.net/abkr/" + $file, $file)
}

当然,首先cd进入您要下载文件的目录。

答案4

为了参考和完整性,提供一个没有 seq 的版本,如果下载由于某种原因停止,则输出良好并继续:

#!/bin/sh
for i in 00{1..9} 0{10..99} {100..144}; do
    printf 'http://server6.mp3quran.net/abkr/%03d.mp3 ' $i
done | xargs wget -q --show-progress -c

相关内容