题
我试图运行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>
不隶属于 StackOverflow