我正在使用以下函数将文件添加到.zip存档中工作正常,但我需要能够包含某些文件的父目录。有什么想法吗?
function Add-ZipFile
{
param([string]$zipfilename,
[string]$filter)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
$files = get-childitem -Filter "$filter" -recurse
foreach($file in $files)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
答案 0 :(得分:2)
根据我的知识,您无法使用shell.application
将一个特定文件添加到zip文件并保存其文件夹结构。
你有两个选择:
$Directory = Get-Item .
$ParentDirectory = Get-Item ..
$ZipFileName = $ParentDirectory.FullName + $Directory.Name + ".zip"
if (test-path $ZipFileName) {
echo "Zip file already exists at $ZipFileName"
return
}
set-content $ZipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $ZipFileName).IsReadOnly = $false
$ZipFile = (new-object -com shell.application).NameSpace($ZipFileName)
$ZipFile.CopyHere($Directory.FullName)
我建议,就像我对你的问题的评论一样,使用更安全的方式以编程方式创建zip文件,如DotNetZip do(IMO)。
答案 1 :(得分:-3)
使用CSharpZipLib结束。按照我的希望工作。
谢谢大家。