我想使用 Powershell 递归地将一组特定的文件从一系列子目录复制到一个文件夹中(没有源文件夹结构)。这些文件都遵循文件名格式“Writing (*).xlsm”。此外,一些目录的文件存储在 ZIP 文件中,我想在这些 ZIP 文件中搜索相同的文件名。
我见过很多可以复制文件的解决方案,但结果会重新创建文件所在的文件夹结构,但我需要将它们全部捕获到一个目录中,而且我还没有看到任何似乎包含以下功能的东西将 ZIP 文件的打开添加到搜索中。
我想使用 Powershell 递归地将一组特定的文件从一系列子目录复制到一个文件夹中(没有源文件夹结构)。这些文件都遵循文件名格式“Writing (*).xlsm”。此外,一些目录的文件存储在 ZIP 文件中,我想在这些 ZIP 文件中搜索相同的文件名。
我见过很多可以复制文件的解决方案,但结果会重新创建文件所在的文件夹结构,但我需要将它们全部捕获到一个目录中,而且我还没有看到任何似乎包含以下功能的东西将 ZIP 文件的打开添加到搜索中。
尝试这个:
$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
}