0

我想使用 Powershell 递归地将一组特定的文件从一系列子目录复制到一个文件夹中(没有源文件夹结构)。这些文件都遵循文件名格式“Writing (*).xlsm”。此外,一些目录的文件存储在 ZIP 文件中,我想在这些 ZIP 文件中搜索相同的文件名。

我见过很多可以复制文件的解决方案,但结果会重新创建文件所在的文件夹结构,但我需要将它们全部捕获到一个目录中,而且我还没有看到任何似乎包含以下功能的东西将 ZIP 文件的打开添加到搜索中。

4

1 回答 1

0

尝试这个:

$Path = "C:\"
$Destination = "C:\Destination"
$Files = @()
$Files = @(Get-ChildItem -Path "$Path" -Filter "Writing*.xml" -Recurse).Fullname

#Zip
$ZipFiles = @(Get-ChildItem -Path "$Path" -Filter "*.Zip" -Recurse).Fullname
[Void][Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
Add-Type -AssemblyName System.IO.Compression.FileSystem
$ToRemove = @()
Foreach($Zip in $ZipFiles){
        $RawFiles = [IO.Compression.ZipFile]::OpenRead($Zip).Entries
        foreach($RawFile in $RawFiles) {
            If($RawFile.FullName -like "Writing*.xml"){
                $outpath = $Zip.Remove($Zip.Length - 4)
                [System.IO.Compression.ZipFile]::ExtractToDirectory($Zip, $outpath)
                $Files += "$outpath\" + $RawFiles.Fullname
                $ToRemove += $outpath
            }
        }

    }

Foreach($File in $Files){
    Copy-Item -Path $Files -Destination $Destination
}

Foreach($Folder in $ToRemove){
    Remove-Item -Path $Folder -Force
}
于 2016-10-06T06:45:47.440 回答