2014-01-06 21 views
9

我試圖使用Powershell v3和.NET 4.5來更改文件夾中的文件中的字符串,然後壓縮該文件夾的內容。我得到了字符串替換工作,但是然後zip繼續在目錄路徑上拋出一個ArgumentException,儘管我確信它是正確的。Compression.ZipFile拋出ArgumentException「該路徑不是合法形式」

Exception calling "CreateFromDirectory" with "4" argument(s): "The path is not of a legal form." 
At line:5 char:4 
+ [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ArgumentException 
上ZipFile.CreateFromDirectory

Microsoft文章:
http://msdn.microsoft.com/en-us/library/hh485721(v=vs.110).aspx

我試圖代碼:

function ZipFiles($zipfilename, $sourcedir) 
{ 
    [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") 
    $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal 
    [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, 
     $zipfilename, $compressionLevel, $false) 
} 

Get-Content public-build\index.html | ForEach-Object { $_ -replace "data-default-api=`"dev`"", "data-default-api=`"test`"" } | Set-Content public-build\index2.html 
cp public-build\index2.html public-build\index.html 
rm public-build\index2.html 
ZipFiles("public-build.zip", "C:\Users\Administrator\Desktop\public-build") 

我試圖改變「C:\用戶\管理員\桌面\公-build「到: 」C:\ Users \ Administrator \ Desktop \ public-build「
」C:\\ Users \\ Administrator \\ Desktop \\ public-build「
「C:\\ \\用戶\\管理員桌面\\公共建設\\」 「\公建」
「公建」
「公共建設\」

」。 \ public-build \「
所有拋出相同的錯誤。我也嘗試過一個只是「publicbuild」的文件夾名稱,以防連字符,但仍然有相同的錯誤。

我很難過。我想要做的就是壓縮文件夾。希望有人會指出我正在犯的一些明顯的錯誤,但除此之外,我也歡迎任何替代方法。我不想安裝第三方工具,但如果沒有其他解決方案,可能不得不求助於它。

回答

18

我認爲問題在於你在調用函數時提供參數的方式。 Powershell參數以空格分隔的值提供,它不使用()語法。

ZipFiles "public-build.zip" "C:\Users\Administrator\Desktop\public-build" 
+0

是的!這工作。非常感謝!很高興這很簡單。 –

+0

這對我來說也是一個很棒的時刻!謝謝! –

+0

我其實只是做了同樣的問題,調用完全相同的功能,瘋了吧! –

相關問題