【问题标题】:Powershell using call operator on 7zipPowershell 在 7zip 上使用呼叫运算符
【发布时间】:2013-05-10 16:38:50
【问题描述】:

简介

所以,我试图从一个目录中读取一个 zip 文件,并将其解压缩到一个 tmp 位置。问题是 powershell 似乎误解了引号并且没有写出 $copyLocation 变量的值。相反,它将文件复制到 [currentDirectory]\$copyLocation。我希望大家能提供帮助。我是 Powershell 的新手,这只是我为接管我们的构建自动化而必须编写的脚本的一部分。提前谢谢你。

顺便说一下,hosts 是一个我们正在迭代的 XmlElement。因此,我们将此 zip 文件部署到 xml 配置文件中指定的多个主机上的某个位置。

function copyWebappToDestination($copyWebappFrom,$to,$hosts){
foreach( $it in $hosts ){
    Write-Host "Deploying webapp" $webapps.webappName "to" $it.hostIp "at" $it.to

    setUpDirectories

    foreach($file in $filelocation){
        if($file.name.ToString() -eq "Web.Main.zip"){
            $filename = $file.name.ToString()
            $hostIp = $it.hostIp
            $fileDest = $file.FullName
            #unzip the files
            & '7z' x ""$fileDest"" -o""$copyLocation"" -y -r
            break
        }
    }
}

编辑

最奇怪的是我写出了命令

& '7z' x "C:\MoveToProduction\SM\PROD\Web.Main.zip" -o"C:\MoveToProduction\SM\PROD\tmp" -y -r"

然后从 Powershell 控制台运行它,它工作得很好。它只是在脚本的上下文中不起作用。

编辑终稿

所以,我放弃了让电话接线员工作的尝试。基本上,我最终确定的是命令:

Invoke-Expression -command  "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"

【问题讨论】:

  • 我想你想要& 7z "C:\MoveToProduction\SM\PROD\Web.Main.zip" "-oC:\MoveToProduction\SM\PROD\tmp" -y -r
  • 不确定它是否有帮助,但我用 powershell DotNetZip 很幸运。可能会更容易。

标签: powershell


【解决方案1】:

所以,我放弃了让电话接线员工作的尝试。基本上,我最终确定的是命令:

Invoke-Expression -command  "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"

【讨论】:

    【解决方案2】:

    在引号中加上 -o

    $tz = "c:\program files\7-zip\7z.exe"
    set-alias sz $tz
    $source="c:\users\user\test\*.tar
    $dest="c:\users\user\test2be"
    
    sz x "$source" "-o$dest" -y
    

    【讨论】:

      【解决方案3】:

      在 cmets 之后编辑:

      您应该尝试的另一件事是使用一对双引号来包装所有 7z 参数

      初步回答

      尝试使用 $($copylocation.FullName) 获取目标目录的完整路径

      当您使用作为 DirectoryInfo 的 $copylocation 时,Powershell 使用对象的 ToString 方法,该方法恰好只给出目录名称,而不是完整路径

      【讨论】:

      • 它实际上并没有给出目录名称。那就是问题所在。它将文件复制到 $copyLocation 目录。
      • 我现在明白了......你有没有试过不加双引号?
      • 您应该尝试的另一件事是使用一对双引号来包装所有 7z 参数
      • 并带有一组 if 双引号括起来 $filedest 和另一个封闭 -o.... ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多