我想将一些选定的文件夹仅使用相对路径压缩到存档中。
其中一些文件夹名称相同(所有发布文件夹,所有调试文件夹)。
过滤工作正常,我在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
答案 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())
希望这有帮助