我试图运行powershell命令调用的7-Zip使用下面的命令来压缩一个文件夹:

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

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

这不工作,我试图找出调用7-Zip的从PowerShell中的最佳途径。想法?

有帮助吗?

解决方案

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

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

& $pathToZipExe $arguments;

我已经得到进使用与呼叫操作者的参数数组的习惯,这似乎是比其它方法更鲁棒。

其他提示

您不需要使用调用,表达只需使用调用(电话)运营商&调用字符串名称要执行的命令。请注意,您希望保留的参数在这种情况下,即在串SevenZip应该只是路径的EXE e.g分开:

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

您其实并不需要调用-表达。

:可以简单地通过使用&诸如调用命令
&$Command

但也有可能是更适合你想要做什么开始处理cmdlet的。通过以上的字符串执行该命令,你就容易出错,如果$ SevenZip包含空格,而不是引用。相反,我使用:

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

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

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文件的最简单的方法。

让我猜,它试图调用 “C:\ PROGRAM”?

不知道正确的语法为PS的,但你需要做的东西的空间。

适用于我:

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

Write-Host "Running: $command"

Invoke-Expression $command

您也可以使用从Windows PowerShell脚本内的MS-DOS命令。

我一直喜欢的CMD.exe的START命令,它允许你开始并行的命令。

所以,开始您的7-Zip,把下面的命令将在PowerShell脚本:

    cmd.exe /c start <your 7-zip command like in MS-DOS> 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top