【问题标题】:Running 7-Zip from within a Powershell script从 Powershell 脚本中运行 7-Zip
【发布时间】:2022-01-31 05:53:08
【问题描述】:

我正在尝试使用 7-Zip 备份 Powershell (v2) 脚本中的一些文件。

我有:

$zipPath = "C:\Program Files\7-Zip\7z.exe"
[Array]$zipArgs = "-mx=9 a", "`"c:\BackupFolder\backup.zip`"", "`"c:\BackupFrom\backMeUp.txt`""

&$zipPath $zipArgs;

但是当我运行它时,我得到:

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18


Error:
Incorrect command line

把这个写到我得到的屏幕上:

C:\Program Files\7-Zip\7z.exe -mx=9 a "c:\BackupFolder\backup.zip" "c:\BackupFrom\backMeUp.txt"

所以我假设我需要在 7z.exe 的路径周围加上引号,这给了我:

$zipPath = "C:\Program Files\7-Zip\7z.exe"
$zipPath = " `"$zipPath`" "
[Array]$zipArgs = "-mx=9 a", "`"c:\BackupFolder\backup.zip`"", "`"c:\BackupFrom\backMeUp.txt`""

&$zipPath $zipArgs;     

然后我收到以下错误:

    The term '"C:\Program Files\7-Zip\7z.exe"' is not recognized as the name of a cmdlet, function, script file
, or operable program. Check the spelling of the name, or if a path was included, verify that the path is c
orrect and try again.
At C:\BackupScript\Backup.ps1:45 char:22
+                     & <<<< `"$zipPath`" $zipArgs;                    
    + CategoryInfo          : ObjectNotFound: ("C:\Program Files\7-Zip\7z.exe":String) [], CommandNotFound 
   Exception
    + FullyQualifiedErrorId : CommandNotFoundException

写出来给我:

"C:\Program Files\7-Zip\7z.exe" -mx=9 a "c:\BackupFolder\backup.zip" "c:\BackupFrom\backMeUp.txt"

直接粘贴到命令窗口时效果如预期。 我一直试图弄清楚这一点,但假设我遗漏了一些东西(可能很明显)。任何人都可以看到我需要做什么才能运行吗?

【问题讨论】:

  • 我最近写的一篇文章可能会有所帮助:Running Executables in PowerShell。试试&amp; "C:\Program Files\7-Zip\7z.exe" "-mx=9" a C:\BackupFolder\Backup.zip C:\BackupFrom\backMeUp.txt
  • 干杯,这是一篇有趣的文章。以后我需要好好读书。我想你可能已经有了答案。而我有"-mx=9 a" 我需要的是"-mx=9" a。我不能使它与 $zipArgs 变量一起使用,但它确实与 &amp; "$zipPath" "-mx=9" a "c:\BackupFolder\backup.zip" "c:\BackupFrom\backMeUp.txt" 一起使用
  • 正确;为防止 PowerShell 将 -mx=9 解释为运算符,请使用引号或使用反引号转义参数(如文章中所述)。
  • 试试&amp;$zipPath @zipArgs

标签: powershell 7zip


【解决方案1】:

找到this 脚本并根据您的需要对其进行调整。可以试试吗:

$7zipPath = "$env:ProgramFiles\7-Zip\7z.exe"

if (-not (Test-Path -Path $7zipPath -PathType Leaf)) {
    throw "7 zip file '$7zipPath' not found"
}

Set-Alias 7zip $7zipPath

$Source = "c:\BackupFrom\backMeUp.txt"
$Target = "c:\BackupFolder\backup.zip"

7zip a -mx=9 $Target $Source

【讨论】:

  • 为此干杯。我得到了那个工作。如果我不熟悉这种语法,我需要花一些时间(学习新的做事方式总是好的)。欢呼
  • 漂亮的别名在那里工作,确实有助于更轻松地调用 7z。谢谢!
  • 虽然我并不是说别名总是一件好事,但也可以称之为7zset-alias 7z "$env:ProgramFiles\7-Zip\7z.exe"
  • 文档sevenzip.osdn.jp/chm/cmdline/commands/add.htm。他们帮助我弄清楚我需要 cd 进入目录以避免父文件夹被复制到 zip 中。
【解决方案2】:

在 7z 命令前加上“&”特殊字符。示例:&7z ...

【讨论】:

    【解决方案3】:

    只需在命令前加上 & 符号

    & "C:\Program Files\7-Zip\7z.exe" -mx=9 a "c:\BackupFolder\backup.zip" "c:\BackupFrom\backMeUp.txt"
    

    【讨论】:

      【解决方案4】:

      也许更简单的解决方案是通过cmd 在您的 Powershell 上运行 7-zip:

      cmd /c 7za ...
      

      【讨论】:

      【解决方案5】:

      如果你正确地调整它:不要忘记 "$Target" 上的 "" 并避免在路径中有空格的 c:\programm 文件中使用 $7zipPath

      Set-Alias 7zip $7zipPath
      
      $Source = "c:\BackupFrom\backMeUp.txt"
      $Target = "c:\BackupFolder\backup.zip"
      
      7zip a -mx=9 "$Target" "$Source"
      

      7z a "$ArchiveName" -t7z '@listfile.txt'
      

      【讨论】:

      【解决方案6】:

      尝试使用参数-file来指定程序或脚本的位置:

      -文件“C:\Program Files\someting.exe”

      【讨论】:

        【解决方案7】:
        C:\'Program files'\7-Zip\7z.exe a '$archiveFile'  -Path '$dest'
        

        地点:

        • archiveFile = 存档文件名。
        • dest = 目标文件夹。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          • 2019-12-02
          • 2019-09-30
          相关资源
          最近更新 更多