代码之家  ›  专栏  ›  技术社区  ›  Guy

在程序文件中使用exe调用表达式

  •  11
  • Guy  · 技术社区  · 16 年前

    我正在尝试运行Powershell命令来调用7-Zip,以便使用以下命令来压缩文件夹:

    $command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
    Invoke-Expression $command
    

    输入到$command中的变量已经设置好,$SevenZip是“c:\Program Files\7-Zip\7z.exe”

    这不起作用,我正在努力找出从Powershell调用7-Zip的最佳方式。思想?

    7 回复  |  直到 16 年前
        1
  •  25
  •   Tom Hazel    16 年前

    我以前也有过同样的问题。这段代码(几乎)直接来自我当前使用的备份脚本:

    [string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
    [Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;
    
    & $pathToZipExe $arguments;
    

        2
  •  6
  •   Keith Hill    16 年前

    您不需要使用Invoke表达式,只需使用Invoke(call)操作符即可 &

    &$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
    
        3
  •  4
  •   Josh    16 年前

    &$Command
    

    但是还有一个Start-Process cmdlet,它可能更适合您尝试执行的操作。通过将命令作为上面的字符串执行,如果$SevenZip包含空格且未被引用,则很容易出错。相反,我会使用:

    Start-Process $SevenZip "...rest..."
    
        4
  •  3
  •   Craig Strohl    11 年前

    我也遇到了这个问题,这是我的解决方案。

    invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "
    

    我可以将参数保留在指向exe的单引号之外,我认为这可能是使用调用表达式调用带有参数的exe的最简单方法。

        5
  •  1
  •   Anon.    16 年前

    不确定PS的语法是否正确,但您需要对该空间做些什么。

        6
  •  0
  •   Ivan    12 年前

    $command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
    
    Write-Host "Running: $command"
    
    Invoke-Expression $command
    
        7
  •  0
  •   Josh K    11 年前

    您还可以在Windows PowerShell脚本中使用MS-DOS命令。

    我一直很喜欢CMD.exe的START命令,它允许您并行启动命令。

        cmd.exe /c start <your 7-zip command like in MS-DOS> 
    
    推荐文章