windows 递归压缩同名目录中的文件的最简单方法是什么?

dm7nw8vv  于 2022-11-18  发布在  Windows
关注(0)|答案(2)|浏览(126)

我有一个目录(2022),其中包含以日期作为名称的子目录(2022010120220102等)。
在每个子目录中,我都有我想归档的文件。这些文件的名称以L0283L0284开头,然后是数字和日期。例如:L0284408.20220101.2123。我想使用的过滤器是L028*。我想将每个文件归档到它们当前所在的同一个文件夹中,并使用名为400401_L028**3**408archive.zip400401_L028**4**408archive.zip的压缩文件夹,具体取决于它是L0283还是L0284文件。
该存档已经存在,我可以写一个脚本,删除它第一,但如果我可以覆盖它,那么它会保存一些时间。我将重新运行这个脚本在多个根目录。
我研究了powershell的压缩存档功能,但我不知道如何添加一个过滤器的文件名,并有一个不同的输出名称,加上02830284是逃避我。

gpnt7bae

gpnt7bae1#

你有PKZip吗?这是工作:

pkzipc -add -recurse -path 400401_L0283408archive.zip 2022/L0283*
pkzipc -add -recurse -path 400401_L0284408archive.zip 2022/L0284*

它们在2022/的子目录中查找并存档与模式匹配的任何级别的文件。

1hdlvixo

1hdlvixo2#

我更喜欢使用System.IO.Compression库以获得灵活性。(每个子文件夹一个),因此我建议在每次写入后使用Dispose()关闭zip。

@( 'System.IO.Compression','System.IO.Compression.FileSystem') | % { [void][Reflection.Assembly]::LoadWithPartialName($_) }
Set-Location '.\2022'
$FilesToZip = Get-ChildItem 'L0283*' -File -Recurse | ?{$_.Name -notlike '*.zip'}
ForEach($file in $FilesToZip){
    Try{
        Set-Location $file.Directory.FullName #change to the folder where the file exists
        $WriteArchive = [IO.Compression.ZipFile]::Open( '.\400401_L0283408archive.zip', 'Update')#Update mode adds files to new or existing zip
        [IO.Compression.ZipFileExtensions]::CreateEntryFromFile($WriteArchive, $file.FullName, $file.Name, 'Optimal')
    }Finally{
        $WriteArchive.Dispose() #close the zip file so it can be read later     
    } 
}

$FilesToZip = Get-ChildItem 'L0284*' -File -Recurse | ?{$_.Name -notlike '*.zip'}
ForEach($file in $FilesToZip){
    Try{
        Set-Location $file.Directory.FullName #change to the folder where the file exists
        $WriteArchive = [IO.Compression.ZipFile]::Open( '.\400401_L0284408archive.zip', 'Update')#Update mode adds files to new or existing zip
        [IO.Compression.ZipFileExtensions]::CreateEntryFromFile($WriteArchive, $file.FullName, $file.Name, 'Optimal')
    }Finally{
        $WriteArchive.Dispose() #close the zip file so it can be read later     
    } 
}

它的效率很低,因为每次写入都要打开和关闭归档。为了简单起见,我重复了代码,但是如果我可以控制zip文件结构,我会重写这个脚本,创建一个包含所有文件的zip,同时保留相对路径,就像我在this answer中提到的那样。
编辑:我添加了一个过滤器来防止压缩 *.zip文件:| ?{$_.Name -notlike '*.zip'}请尝试使用此过滤器。

相关问题