递归地将文件从源复制到单个目录,包括搜索ZIP文件

时间:2016-10-06 04:46:26

标签: powershell copy zip copy-item

我想使用Powershell以递归方式将一系列子目录中的特定文件集复制到单个文件夹中(没有源文件夹结构)。这些文件都遵循文件名格式"写作(*)。xlsm"。此外,一些目录的文件存储在ZIP文件中,我想在这些ZIP文件中搜索相同的文件名。

我已经看到很多可以复制文件的解决方案,但结果重新创建了找到文件的文件夹结构,但我需要将它们全部捕获到一个目录中,我还没有看到任何看似包括将ZIP文件的开头添加到搜索中的功能。

1 个答案:

答案 0 :(得分: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
}