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

Guy*_*Guy 11 powershell 7zip

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

$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*zel 23

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

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

& $pathToZipExe $arguments;
Run Code Online (Sandbox Code Playgroud)

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


Kei*_*ill 6

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

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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