【问题标题】:Powershell one-liner not working from cmdPowershell 单线不能从 cmd 工作
【发布时间】:2022-01-25 04:51:10
【问题描述】:

当我在普通的 PowerShell 窗口中运行此命令时,它工作正常:

Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory("c:/program/compressed.zip","c:/program")

但是当我运行它时:

powershell Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory("c:/program/compressed.zip","c:/program")

cmd /c powershell Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory("c:/program/compressed.zip","c:/program")

我收到此错误:

At line:1 char:119
+ ... System.IO.Compression.ZipFile]::ExtractToDirectory(c:/program/compressed.z ...
                                                                  ~
You must provide a value expression following the '/' operator.
At line:1 char:119
+ ... System.IO.Compression.ZipFile]::ExtractToDirectory(c:/program/compressed.z ...
                                                                 ~
Missing ')' in method call.
At line:1 char:119
+ ... Compression.ZipFile]::ExtractToDirectory(c:/program/compressed.zip,c:/progr ...
                                                  ~~~~~~~~~~
Unexpected token 'compressed.zip' in expression or statement.

在前面添加PowerShell时如何使它工作?

感谢您的宝贵时间。

【问题讨论】:

  • 您可以(重新)阅读运行PowerShell /? 时获得的帮助。尤其是参数-Command ;-)
  • 这可能也有帮助:PowerShell CLI fundamentals:
  • 添加 {} 修复了从 powershell 窗口运行时的问题,但从 cmd 调用时仍然无法正常工作
  • 请标记解决您问题的答案as answer,以便您可以帮助其他人

标签: powershell


【解决方案1】:

为我工作

powershell -command "& {Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory(\"c:/program/compressed.zip\",\"c:/program\")}"

来自 powershell /?我们得到-command "& { }"

但封闭的 " 对外部引号是有毒的,因此需要 \" 转义

现在你有几个替代答案来避免那些内部"

注意,这是在我测试过的 Windows 7 上解压缩的唯一原生方式,但在 Windows 10/11 上,我会使用更简单的 TAR 来解压缩

TAR -m -xf compressed.zip 如果它在那个文件夹中运行,或者

cd /d c:\program & TAR -m -xf compressed.zip(其他选项为shown in answer

但是TAR --help 不会告诉你如何压缩(tar -a),尽管这是可能的。有关基本选择,请参见此处https://stackoverflow.com/a/70011759/10802527,但您可以使用 TAR 在收集文件的文件夹之间导航,因为它进入一个 zip。使用 TAR 可能无法轻松完成的操作是组合(附加)没有临时输出和输入的 zip。

【讨论】:

    【解决方案2】:

    这就是我的工作方式

    powershell -c "Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('c:/program/compressed.zip','c:/program')"
    

    你只需要用路径的单引号替换双引号

    【讨论】:

      【解决方案3】:

      用单引号对我有用。

      powershell using assembly IO.Compression.FileSystem; using namespace IO.Compression; [ZipFile]::ExtractToDirectory('c:/program/compressed.zip','c:/program')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2022-01-20
        • 2017-07-09
        • 2014-10-01
        • 2019-12-28
        • 1970-01-01
        相关资源
        最近更新 更多