我想使用Powershell以递归方式将一系列子目录中的特定文件集复制到单个文件夹中(没有源文件夹结构)。这些文件都遵循文件名格式"写作(*)。xlsm"。此外,一些目录的文件存储在ZIP文件中,我想在这些ZIP文件中搜索相同的文件名。
我已经看到很多可以复制文件的解决方案,但结果重新创建了找到文件的文件夹结构,但我需要将它们全部捕获到一个目录中,我还没有看到任何看似包括将ZIP文件的开头添加到搜索中的功能。
答案 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
}