2009-12-16 115 views
11

我试图运行PowerShell命令来调用7-Zip的使用下面的命令来压缩一个文件夹调用-表达:在Program Files文件exe文件

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

变量被送入$命令是已经设置和$ SevenZip是“C:\ Program Files \ 7-Zip \ 7z.exe”

这是行不通的,我试图找出从Powershell调用7-Zip的最佳方式。想法?

回答

21

我以前有同样的问题的EXE例如: - 。这是代码(几乎)直接从我目前使用的备份脚本:

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

& $pathToZipExe $arguments; 

我得到了到使用与呼叫操作的参数数组的习惯,这似乎是比其他方法更稳健。

+0

谢谢!完善。 – onupdatecascade 2012-09-04 22:05:03

+0

任何方式从exe获取返回码? – Robin 2014-03-17 18:01:58

3

实际上你不需要Invoke-Expression。你可以简单地使用符号,如调用命令:

&$Command 

但也有可能是更适合你想要做什么开始处理cmdlet的。通过将该命令作为上面的字符串执行,如果$ SevenZip包含空格且未被引用,则很容易出错。相反,我会用:

Start-Process $SevenZip "...rest..." 
1

让我猜,它试图调用“c:\ Program”?

不确定PS的正确语法,但您需要对该空间进行一些操作。

+1

正确的 - 这正是它试图做... – Guy 2009-12-16 22:14:25

6

您不需要使用Invoke-Expression只需使用调用(调用)运算符&来调用一个字符串来命名要执行的命令。需要注意的是要保持独立的参数在这种情况下,即在串SevenZip应该只是路径

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName 
0

工作对我来说:

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

Write-Host "Running: $command" 

Invoke-Expression $command 
2

我就遇到了这个问题为好,这里是我的解决方案。

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

我能离开单引号指着我的exe文件超出了我的PARAMATERS,我想这大概是调用使用调用表达与参数的exe文件的最简单方法。

+0

很好的解决方案,为我工作 – lara400 2015-05-15 09:51:55

0

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

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

因此,要启动的7-Zip,把下面的命令将在PowerShell脚本:

cmd.exe /c start <your 7-zip command like in MS-DOS> 
+0

这个答案无助于解决问题 – 2015-05-25 06:51:16

相关问题