我有一个案例,我想触发自动下载每个读者的 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