2016-11-18 1 views
3

私は1000個以上のURLにアクセスしようとしています。 URLの表示方法は次のとおりですバッチファイルのURL群の上にループします

url = "http://***/00001" 
url = "http://***/00002" 
... 
url = "http://***/01000" 

これらのURLに自動的にアクセスするバッチファイルを作成したいと思います。私は、バッチファイルを書いてコマンドラインでそれを実行する方法について少し学んだ。何かが

ECHO OFF 

FOR /L %i IN (1,1,1000) DO (

    curl -XGET "http://***/0000%i" 

    ECHO finish %i 
) 

次のようになります。しかし、それは動作しませんし、私は、ループ内のURLに「00001」部分を変更する方法を見つけ出すことができないんです。誰も助けることができますか?

答えて

0

バッチ内、メタ変数(この場合i)用%が倍増する必要があります。単にダブル%%iに10000000を追加する各%i


ため%あなたは5桁の変数が必要な場合は、

@ECHO OFF 
setlocal enabledelayedexpansion 

FOR /L %%i IN (1,1,1000) DO (
    set /a url=10000000+%%i 
    curl -XGET "http://***/!url:~-5!" 

    ECHO finish %%i 
) 

urlの値がそれほど最後の5 10000001..10001000であることを保証します数字は!url:~-5!でアクセスできます。

キーポイントはdelayedexpansionurlの変更値へのアクセスを可能にするために、その値がsubstringingを可能にするために通常の環境変数でなければならないことに呼び出される必要があるということです。メタ変数は直接部分文字列にすることはできません。当然、url%%iの値に直接割り当てることができます。%%iが10000001から10001000まで変化する場合、コード保守の観点からは明らかではありません。

+0

それとも別の方法を説明し、 '%%のi'とあなたの例では%のi''のすべてのインスタンスを置き換えます。コマンドラインでは、正しいフォームは '%i'ですが、バッチファイルの中から実行すると正しいフォームは' %% i'です。 – LinuxDisciple

+0

@マグー、それはうまく動作します。しかし別の問題があります。私のコード "0000 %% i"は "000010"を与えるようです。しかし、私が欲しいのは実際には "00010"です。どうすればこの問題を解決できますか?ありがとう –

+0

@マグー、応答に感謝します。しかし、それは動作していないようです。 "http:// ***/00012!"のようなものではなく、 "http:// *** /!url:〜-5!"にアクセスしようとします。 –

1

マグーの答え@の同じ考えではなく、文字列での作業:

@echo off 
setlocal enabledelayedexpansion 

set "$BaseUrl=http://****/" 

for /l %%a in (1,1,1000) do (
    set "$Number=0000%%a" 
    curl -XGET "%$BaseUrl%!$Number:~-5!" 
) 
関連する問題