2009-12-16 117 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

相關問題