DotNetZip, Powershell и относительные пути - PullRequest
1 голос
/ 20 ноября 2011

Я хочу заархивировать некоторые выбранные папки в архив только с их относительными путями .

Некоторые из них имеют одинаковые имена папок (все релиз-папки, все отладочные папки).

Фильтрация работает нормально, и я вызвал set-location перед командой get-children.

Какой самый простой способ сделать эту работу?

Должен ли я действительно реализовать что-то вроде этого

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

Может ли кто-нибудь дать мне пример?

Thx

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Я наконец-то реализовал это, и он работает с относительными путями:

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()
0 голосов
/ 21 ноября 2011

Когда мне нужно обработать относительные пути, я делаю что-то вроде этого:

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

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

Убедитесь, что шаблон косых черт, который вы используете, одинаков в $ basePath и $ newBasePath (используйте .Trim () длябудь уверен)

Надеюсь, это поможет

...