我有一个包含多个URL的文件,如下所示:
http://ligman.me/1HCDxl9
http://ligman.me/1HCCCRP
http://ligman.me/1HCCCRP
http://ligman.me/1H4Q0e5
http://ligman.me/1H4Q0e5
http://ligman.me/1JI6V77
http://ligman.me/1JI6V77
http://ligman.me/1CSMobd
http://ligman.me/1CSMobd
我想编写一个PowerShell脚本,它将逐行读取此文件,然后在每行(URL)后面下载文件。到目前为止,我已经设法使用以下脚本下载文件:
$reader = [System.IO.File]::ReadLines("C:\Temp\Ebooks\ebooks.txt") | Where-Object { $_ -ne '' }
$targetDir = "C:\Temp\Ebooks\"
$wc = New-Object System.Net.WebClient
foreach($file in $reader) {
$sourceFileName = $file.SubString($file.LastIndexOf('/')+1) + ".pdf"
$targetFileName = $targetDir + $sourceFileName
$wc.DownloadFile($file, $targetFileName)
Write-Host "Downloaded $file successfully to directory $targetDir"
}
我的问题是文件名。现在,我只能将它们另存为PDF,但有时文件不是PDF文件,而是DOCX或XLSX。另外,如果它们没有命名为1225DID或13DChwr,那将是很好的选择。基本上,我仍然需要读取实际的文件名,然后使用该名称保存下载的文件。
我怎样才能做到这一点?
编辑:这适用于获取实际的文件名,但是当我尝试打开文件时,我得到一个错误,提示它们不是PDF或已损坏(前提是我尝试使用Foxit Reader打开PDF文件)
$reader = [System.IO.File]::ReadLines("C:\Temp\Ebooks\ebooks.txt") | Where-Object { $_ -ne '' }
$targetDir = "C:\Temp\Ebooks\"
$wc = New-Object System.Net.WebClient
$reader | %{
$uri = $_
$request = Invoke-WebRequest -Uri $uri -MaximumRedirection 0 -ErrorAction Ignore
$sourceFileName = $request.Headers.Location.SubString($request.Headers.Location.LastIndexOf('/') + 1)
$targetFileName = $targetDir + $sourceFileName
$wc.DownloadFile($file, $targetFileName)
Write-Host "Downloaded $file successfully to directory $targetDir"
}
使用提琴手,似乎在后台进行了重定向。
如果执行以下脚本,则会在提供的URL后面获得“真实” URL。
$links = @(
"http://ligman.me/1HCDxl9",
"http://ligman.me/1HCCCRP",
"http://ligman.me/1H4Q0e5",
"http://ligman.me/1JI6V77",
"http://ligman.me/1CSMobd"
)
$links | %{
$uri = $_
$request = Invoke-WebRequest -Uri $uri -MaximumRedirection 0 -ErrorAction Ignore
Write-Host $request.Headers.Location
}
该脚本将产生以下列表,您可以在其中找到文档名称及其扩展名。
http://download.microsoft.com/download/4/2/f/42f9b256-977e-4792-a9eb-d490516d4468/AF103733558_en-us_access2013quickstartguide.pdf http://download.microsoft.com/download/6/7/5/675609de-a32b-44d4-ace6-86305afb808f/AF103733448_en-us_word2013quickstartguide.pdf http://download.microsoft.com/download/2/8/7/28747b20-70b0-4003-b82a-5ab0d222bbd6/AF103733495_en-us_publisher2013quickstartguide.pdf http://download.microsoft.com/download/e/6/f/e6fc74dc-9f0d-4e6c-bbcc-6855e4d7a78c/AF103733479_en-us_project2013quickstartguide.pdf http://download.microsoft.com/download/c/e/b/ceb742d6-bc1f-4447-ad06-b0842338dd8c/AF103733547_en-us_onenote2013quickstartguide.pdf
这是下载适用于我的文件的版本:
$links | %{
$uri = $_
$request = Invoke-WebRequest -Uri $uri -MaximumRedirection 0 -ErrorAction Ignore
$location = $request.Headers.Location
$output = "D:\temp\" + $location.SubString($location.LastIndexOf('/') + 1)
Invoke-WebRequest -Uri $location -OutFile $output
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句