DotNetZip,Powershell和相对路径

时间:2011-11-20 08:46:06

标签: powershell dotnetzip

我想将一些选定的文件夹仅使用相对路径压缩到存档中。

其中一些文件夹名称相同(所有发布文件夹,所有调试文件夹)。

过滤工作正常,我在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);
} 

有人能为我提供一个例子吗?

THX

2 个答案:

答案 0 :(得分:1)

我终于实现了它,它适用于相对路径:

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()

答案 1 :(得分:0)

当我需要处理相对路径时,我会这样做:

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

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

确保你使用的斜杠模式在$ basePath和$ newBasePath中是相同的(确保使用.Trim())

希望这有帮助