2016-10-04 206 views
1

下載圖像我通常使用PowerShell腳本下載圖像的批量CSV,但我有一個很奇怪的顯示圖像的新網址。我可以修改這個腳本來允許這些圖片網址嗎?用PowerShell腳本

實施例的URL:

https://www.example.com/core/media/media.nl?id=12 & C = 23 & H = b944f2f81326d0bb
HTTPS://www.example。 COM /核心/媒體/ media.nl?ID = 15 & C = 42 & H = 7ed23c91f3574fc9

和當前腳本...

[Reflection.Assembly]::LoadFile(
    'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll') | Out-Null 

$FileName = "C:\Temp\test.txt"; 
$Loc = "C:\Temp\Images\" 
$ImageName = "" 

$wc = New-Object System.Net.WebClient 

$content = Get-Content $FileName 
foreach ($line in $content) { 
    $Image = $Loc + $line.Substring($line.LastIndexOf("/") + 1) 
    $url = $line 

    Write-Host $url 
    Write-Host $Image 

    $wc.DownloadFile($url, $Image) 
} 

Write-Jost "Finished successfully." 

回答

1

在Windows文件名不能包含?*"\字符,所以過濾出來:

$Image = $Loc + ($line.Substring($line.LastIndexOf("/") + 1) -replace '[?*"\\]', '_') 

從動態URL的過程得到了真正的重定向文件名Content-Disposition頭:

$tmp = [IO.Path]::GetTempFileName() 
$wc.DownloadFile($url, $tmp) 

$Image = "$($wc.ResponseHeaders['Content-Disposition'])" -replace '^.*?filename=', '' 
if (!$Image) { 
    $Image = $line.Substring($line.LastIndexOf("/") + 1) -replace '[?*"\\]', '_' 
} 
Move $tmp (Join-Path $Loc $Image) 
+0

啊,我很抱歉,我們正在以不同的方式看待。雖然你的作品(在用jpg擴展名重命名後),我正在尋找拉真正的圖像信息。我的意思是說,就是如果你輸入上面的頂部URL,並點擊右鍵,另存爲....你得到的實際文件名 - 027789-352816.jpg。有什麼方法Powershell可以抓住? –

+0

是的,請參閱已更新的答案。 – wOxxOm

+0

作品 - 奇怪的是,我如何集成它,它總是拋出這些異常調用「DownloadFile」與「2」 參數名稱:地址「 在線:15 char:1 + $ wc.DownloadFile($ url,$ tmp ) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified + FullyQualifiedErrorId:ArgumentNull 不能索引到一個空數組。 在行:17字符:13 + $圖片=「$($ wc.ResponseHeaders ['內容 + ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo:InvalidOpera + FullyQualifiedErrorId:NullArray –