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

时间:2009-12-16 20:37:53

标签: powershell 7zip

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

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

已经设置了输入$命令的变量,$ SevenZip是“c:\ Program Files \ 7-Zip \ 7z.exe”

这不起作用,我正在尝试找出从Powershell调用7-Zip的最佳方法。想法?

7 个答案:

答案 0 :(得分:23)

我之前遇到过同样的问题。这是代码(几乎)直接来自我目前使用的备份脚本:

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

& $pathToZipExe $arguments;

我已经养成了使用带调用运算符的参数数组的习惯,它似乎比其他方法更强大。

答案 1 :(得分:6)

您不需要使用Invoke-Expression只需使用调用(调用)运算符&来调用命名要执行的命令的字符串。请注意,在这种情况下,您希望保持参数分离,即字符串SevenZip应该只是EXE的路径,例如:

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

答案 2 :(得分:4)

您实际上不需要Invoke-Expression。您只需使用&符号调用该命令,例如:

&$Command

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

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

答案 3 :(得分: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的单引号之外,我认为这可能是使用invoke-expression调用带参数的exe的最简单方法。

答案 4 :(得分:1)

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

不确定PS的正确语法,但您需要对该空间做一些事情。

答案 5 :(得分:0)

适合我:

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

Write-Host "Running: $command"

Invoke-Expression $command

答案 6 :(得分:0)

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

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

因此,要启动7-zip,请在Powershell脚本中添加以下命令:

client.user_timeline(user, :count => 200).each { |tweet| 
  file.puts tweet.text