2014-01-06 13 views
9

Powershell v3および.NET 4.5を使用して、フォルダ内のファイル内の文字列を変更し、フォルダの内容を圧縮しようとしています。私は文字列の置換作業を持っているが、正しいと確信しているにもかかわらず、zipはディレクトリパスにArgumentExceptionをスローし続けます。Compression.ZipFile throw 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:\ユーザーは\管理者\デスクトップ\公開"ビルド"を "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

私は実際にはまったく同じ機能を呼び出すこの同じ問題をしました、クレイジーハァッ! –