2017-05-16 7 views
0

「test」という名前のすべてのフォルダを見つけて、別の名前の単一フォルダにそれらを圧縮したいと思います。すべての特定のフォルダを見つけてジップします

は、私はいくつかのコードを実行するために管理:

$RootFolder = "E:\" 
$var = Get-ChildItem -Path $RootFolder -Recurse | 
     where {$_.PSIsContainer -and $_.Name -match 'test'} 

#this is assembly for zip functionality 
Add-Type -Assembly "System.IO.Compression.Filesystem" 

foreach ($dir in $var) { 
    $destination = "E:\zip\test" + $dir.Name + ".zip" 

    if (Test-Path $destination) {Remove-Item $destination} 

    [IO.Compression.Zipfile]::CreateFromDirectory($dir.PSPath, $destination) 
} 

それは私にエラーを与える:

Exception calling "CreateFromDirectory" with "2" argument(s): "The given path's format is not supported."

は、私が知りたい、私の$dirのパスを渡すための正しい方法は何ですか。

答えて

1

があります接頭辞はPSProviderです。 CreateFromDirectory() methodは2つの文字列を取ります。最初はsourceDirectoryNameで、オブジェクトからFullnameを使用できます。

$RootFolder = "E:\" 
$Directories = Get-ChildItem -Path $RootFolder -Recurse | Where-Object { 
    $_.PSIsContainer -And 
    $_.BaseName -Match 'test' 
} 

Add-Type -AssemblyName "System.IO.Compression.FileSystem" 

foreach ($Directory in $Directories) { 
    $Destination = "E:\zip\test$($Directory.name).zip" 

    If (Test-path $Destination) { 
     Remove-Item $Destination 
    } 

    [IO.Compression.ZipFile]::CreateFromDirectory($Directory.Fullname, $Destination) 
} 
+0

ありがとう! 'フルネーム'プロペラは私に混乱していた、私はそれが実際にパスであるとは思わなかった! – Stefan0309

1

あなたがV5を使用している場合、あなたはこれを使用することができますコマンドレットを使用したくない場合は、私がCommandlet

を使用することをお勧めします:

PSPathプロパティは Get-ChildItemから返さ
$FullName = "Path\FileName" 
$Name = CompressedFileName 
$ZipFile = "Path\ZipFileName" 
$Zip = [System.IO.Compression.ZipFile]::Open($ZipFile,'Update') 
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($Zip,$FullName,$Name,"optimal") 
$Zip.Dispose() 
+0

、私はそれを試してみましょう! Tnx。 – Stefan0309

0

次のようなフォルダ構造がある場合:

gci -Directory -Recurse -Filter 'test*' | % { 
    Compress-Archive "$($_.FullName)\**" "$($_.FullName -replace '\\|:', '.').zip" 
} 

をそして、あなたが得る:

- Folder1 
-- Test 
- Folder2 
-- Test 
- Folder3 
-- Test 

あなたはこれを行うことができます

D..Dropbox.Projectsを.StackOverflow-Posh.ZipFolders.Folder1.Test.zip D..Dropbox.Projects.StackOverflow-Posh.ZipFolders.Folder2.T est.zip D..Dropbox.Projects.StackOverflow-Posh.ZipFolders.Folder3.Test.zip

それとも、あなたのジッパー内のディレクトリ構造を保持したい場合:

私は法を廃棄好き
gci -Directory -Recurse -Filter 'test*' | % { 
     Compress-Archive $_.FullName "$($_.FullName -replace '\\|:', '.').zip" 
    } 
関連する問題