1

選択したフォルダーを相対パスのみでアーカイブに圧縮したい。

それらのいくつかは同じフォルダー名を持っています (すべてリリース フォルダー、すべてデバッグ フォルダー)。

フィルタリングは正常に機能し、get-children コマンドの前に set-location を呼び出しました。

この仕事をする最も簡単な方法は何ですか?

本当にこのようなものを実装する必要がありますか

foreach ($o in $children)
{   $relPath = $o.FullName.Substring(subPath.Length);
    $relPath = $relPath.Substring(0, relPath.LastIndexOf(@"\"));
    zip.AddFolder($o.Name, $relPath);
} 

誰かが私に例を提供できますか?

どうも

4

2 に答える 2

0

相対パスを処理する必要がある場合は、次のようにします。

$basePath = "C:\MyBasePath"
$newBasePAth = "C:\NewBasePath"

$files = Get-ChildItem $basePath
$newFileNames = foreach ($f in $files) {
    $f.Fullname.Replace($basePath, $newBasePath)
}

使用するスラッシュのパターンが $basePath と $newBasePath で同じであることを確認してください (確実に .Trim() を使用してください)。

お役に立てれば

于 2011-11-21T04:41:12.327 に答える
0

私は最終的にこれを実装し、相対パスで動作します:

function ZipUp-Files ( $mychildren )
{
  foreach ($o in $mychildren) 
  {
        $e= $zipfile.AddDirectory($o.FullName,$o.fullname.substring($pwd.path.length));
  }
}

$children =get-childitem -recurse -force | where-object {$_.psiscontainer} | where {$_.name -match $teststring} 

[System.Reflection.Assembly]::LoadFrom("C:\dotNetZip\zip-v1.9\Release\Ionic.Zip.dll");
$zipfile =  new-object Ionic.Zip.ZipFile($ziptarget);
$zipfile.UseZip64WhenSaving= [Ionic.Zip.Zip64Option]::Always
$zipfile.MaxOutPutSegmentSize=734003200
ZipUp-Files $children
$zipfile.Save("c:\temp\arc_rel.zip")
$zipfile.Dispose()
于 2011-11-22T12:48:20.423 に答える