2016-10-04 164 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 –