【发布时间】:2016-07-15 11:47:03
【问题描述】:
我有一个文件,其中包含多个指向此类文件的 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,它们现在应该是有效的
-
我已经尝试阅读这些文件的内容配置,但似乎它们只有“附件”作为值,没有别的。
-
您是否尝试过使用
Invoke-WebRequest来显示目录的内容? (见stackoverflow.com/questions/27944884/…) -
我更新了我的问题
标签: powershell