【问题标题】:Downloading and opening a series of image urls下载并打开一系列图片网址
【发布时间】:2018-04-12 18:17:55
【问题描述】:

我想要做的是从 URL 下载 2 张图片并在下载后打开它们。这是我所拥有的:

@echo off
set files='https://cdn.suwalls.com/wallpapers/cars/mclaren-f1-gtr-42852-400x250.jpg','http://www.dubmagazine.com/home/media/k2/galleries/9012/GTR_0006_EM-2014-12-21_04_GTR_007.jpg'
powershell "(%files%)|foreach{$fileName='%TEMP%'+(Split-Path -Path $_ -Leaf);(new-object System.Net.WebClient).DownloadFile($_,$fileName);Invoke-Item $fileName;}"

我得到“找不到驱动器”找不到名为“https”的驱动器。

Split-path 命令出现问题但似乎找不到解决方案。

【问题讨论】:

  • Split-Path 用于文件路径,而不是 URI。
  • 我建议'%TEMP%\' + ($_ -split '\/')[-1]
  • 非常感谢。

标签: windows powershell windows-7


【解决方案1】:

您可以摆脱基本的字符串操作,但是,如果该选项可用,我会选择使用任何其他数据感知。在您的情况下,您可以使用 [uri] 类型的加速器来帮助解决这些问题。我也会选择纯 PowerShell,而不是在批处理和 PS 之间拆分。

$urls = 'https://cdn.suwalls.com/wallpapers/cars/mclaren-f1-gtr-42852-400x250.jpg',
    'http://www.dubmagazine.com/home/media/k2/galleries/9012/GTR_0006_EM-2014-12-21_04_GTR_007.jpg'

$urls | ForEach-Object{
    $uri = [uri]$_
    Invoke-WebRequest $_ -OutFile ([io.path]::combine($env:TEMP,$uri.Segments[-1]))
}

Segments 将为您提供 url 的最后一部分,这在您的情况下是正确的文件名。 Combine() 将为您构建目标目标路径。当然,请随意添加您调用项目的逻辑。

如果 url 无法访问或无法访问,这也缺少错误处理。所以要注意这种可能性。上面的代码旨在简要说明方向。

【讨论】:

  • 请注意,他使用WebClient 类可能是有原因的(Win7 默认有PSv2,不包括Invoke-WebRequest
  • @TheIncorrigible1 完全有可能。然而,这将是微不足道的,而且下载一开始就不是问题。如果没有来自 OP 的任何输入,我认为添加更多内容没有多大意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
相关资源
最近更新 更多