我有一个包含多个网址的文件这样的文件下载的文件的文件名:阅读使用PowerShell
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或已损坏(只要我尝试用福昕阅读器打开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之一,之类的东西的例子具有相同的格式? – Bassie
确定我编辑为网址,它们应该现在有效 – LeonidasFett
我已经尝试阅读这些文件的内容处置,但它似乎只有“附件”作为值,没有别的。 – LeonidasFett