2

これは、私が思っていたよりもはるかに難しいことが判明しています (そして、おそらくそうあるべきよりも)。

Cygwin + curlを試しましたが、実行に失敗しました(Cygwinはcurl.exeを見つけることができませんが、パッケージチェックを行ったところ、そこにあります)。

コマンド プロンプトを使用して Windows 用の curl を試してみましたが、うまくいきました。しかし、チェックする URL がかなりあり、それらを個別に実行するのは時間効率が悪いだけです。ここで述べたように、cmdプロンプトを介してcurlにファイルを使用するように指示する方法がわかりません(「xargs」がないため)。

PowerShell も使用してみましたが、これも問題があります。ここでオプション1に従おうとすると

実行しようとするとエラーが発生します$xHTTP.open("GET",$url,$false)

"3" 個の引数で "open" を呼び出し中に例外が発生しました: "特定できないエラー (HRESULT からの例外: 0x80004005 (E_FAIL))"

また、PowerShell では、URL を含むファイルを使用する方法がまったくわかりません。PS に関する私の知識は非常に限られています (存在しない場合のように)。

ここでいいのは、コマンド プロンプト/curl でファイルを使用する方法を理解することですが、それがわかりません。

4

1 に答える 1

8

PowerShell V3 でこれを行うより直接的な方法があります。

PS> Get-Content .\urls.txt
http://www.cnn.com
http://www.msn.com

PS> Get-Content urls.txt | Foreach { Invoke-WebRequest -Uri $_ -Method HEAD }

StatusCode        : 200
StatusDescription : OK
Content           :
RawContent        : HTTP/1.1 200 OK
                    Vary: Accept-Encoding
                    Connection: Keep-Alive
                    Cache-Control: max-age=60, private
                    Content-Type: text/html
                    Date: Tue, 08 Jan 2013 20:21:46 GMT
                    Expires: Tue, 08 Jan 2013 20:22:46 GMT...
Forms             : {}
Headers           : {[Vary, Accept-Encoding], [Connection, Keep-Alive], [Cache-Control, max-age=60, private],
                    [Content-Type, text/html]...}
...

404 を処理するには、try/catch を使用します。

PS> Get-Content urls.txt | 
        Foreach {try {Invoke-WebRequest -Uri $_ -Method HEAD} catch { "Oops - $_"}}

ファイルにリダイレクトするには、これでうまくいきます:

PS> Get-Content urls.txt | 
        Foreach {try {Invoke-WebRequest -Uri $_ -Method HEAD} catch { "Oops - $_"}} > 
        $home\Desktop\foo.txt
于 2013-01-08T20:23:06.140 に答える