it-swarm-ja.com

コマンドライン/ 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があります

Windowscommand lineを使用してループする簡単な方法はありますか?

5
Anas Nakawa

完全を期すために、バッチのみのソリューションを次に示します。

@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に修正しました。

5
zb226

OSについては説明していませんが、* nixとBashを使用している場合は、次のように機能します。

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

どのシェルでも機能するはずのソリューション:

#!/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

コピーしてシェルに貼り付けるか、スクリプトファイルに保存して実行するだけです。

5

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
Indrek

参照と完全性のために、seqのないバージョン、Nice出力、および何らかの理由でダウンロードが停止した場合は続行します。

#!/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
0
HRitter