gpt4 book ai didi

powershell - 如何将文件下载到 $env :temp directory using powershell from cmd console?

转载 作者:行者123 更新时间:2023-12-02 22:36:47 26 4
gpt4 key购买 nike

我可以像这样使用 powershell 从 cmd 控制台将文件下载到固定位置

C:\Users\Weijun>powershell -command "(new-object System.Net.WebClient).DownloadFile('https://example.com/example.zip', 'D:\example.zip')"

但我需要将它下载到系统临时目录,使用 powershell 变量 $env:temp,以下不起作用。(变量未在单引号中扩展)

powershell -command "(new-object System.Net.WebClient).DownloadFile('https://example.com/example.zip', '$env:temp\example.zip')"

如何在方法调用中将变量作为参数传递?

更新:$env:temp:的拼写错误,我修改了。

最佳答案

tl;dr:

从 PowerShell 的外部(cmd.exe - 命令提示符或批处理文件),使用转义双引号字符串 - \"...\" - 在整个命令字符串中 - "..." - 传递给 powershell -command 以获取需要 的字符串插值(例如,变量引用的扩展,例如 $env:temp):

powershell -command "(new-object System.Net.WebClient).DownloadFile('https://example.com/example.zip', \"$env:temp\example.zip\")"

您不仅需要解决 Nkosi 指出的附带问题 - 删除 $env:temp: 末尾多余的 : - 而且您必须 通常要么不引用路径(参数语法),要么使用转义双引号(表达式语法或带 shell 元字符的值) - 引号字符串不起作用,因为 PowerShell 将其内容视为 literal 并且不会扩展环境变量引用。[1]

有关 PowerShell 的两种基本解析模式 - 参数语法与表达式语法的描述 - 请参阅 Get-Help about_Parsing .

简化示例:

  • 没有引号(参数语法):

    c:\>powershell.exe -noprofile -command "write-output $env:temp\example.zip"
    C:\Users\jdoe\AppData\Local\Temp\example.zip
  • 使用双引号(表达式 语法或值包含 shell 元字符,例如 |):

    c:\>powershell.exe -noprofile -command "write-output \"$env:temp\example.zip\""
    C:\Users\jdoe\AppData\Local\Temp\example.zip

注意:当外部调用时,PowerShell 需要将嵌入的" 字符转义为\" - 与 内部 PowerShell 不同,必须使用 `"

应用于您的命令:使用(转义)双引号,这是必需的,因为您正在使用 .NET 方法语法,用表达式语法解析:

powershell -command "(new-object System.Net.WebClient).DownloadFile('https://example.com/example.zip', \"$env:temp\example.zip\")"

[1] 如果您从 PowerShell 运行相同的命令,您将看不到问题,因为命令 作为一个整体 包含在 "...",这意味着 当前 PowerShell session 将扩展 $env:temp - before传递给 powershell.exe
但是,当从 cmd.exe 调用时,不会应用此插值 - 因此需要省略引号或使用嵌入式(转义)双引号。

关于powershell - 如何将文件下载到 $env :temp directory using powershell from cmd console?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com