我有一个powershell脚本,它获取目录中的文件夹列表并压缩最新的.bak文件并将其复制到另一个目录中。
有两个文件夹,我不希望它查找.bak文件。如何排除这些文件夹?我已经尝试了多种方式的-Exclude语句,但我没有运气。
我想忽略的文件夹是"新文件夹"和"新文件夹1"
$source = "C:\DigiHDBlah"
$filetype = "bak"
$list=Get-ChildItem -Path $source -ErrorAction SilentlyContinue
foreach ($element in $list) {
$fn = Get-ChildItem "$source\$element\*" -Include "*.$filetype" | sort LastWriteTime | select -last 1
$bn=(Get-Item $fn).Basename
$CompressedFile=$bn + ".zip"
$fn| Compress-Archive -DestinationPath "$source\$element\$bn.zip"
Copy-Item -path "$source\$element\$CompressedFile" -Destination "C:\DigiHDBlah2"
}
谢谢!
答案 0 :(得分:1)
我要做的是在您找到的文件上使用Directory
属性,并使用-NotLike
运算符对您不想要的文件夹进行简单匹配。我还会使用通配符来简化搜索:
$Dest = "C:\DigiHDBlah2"
$files = Get-ChildItem "$source\*\*.$filetype" | Where{$_.Directory -NotLike '*\New Folder' -and $_.Directory -NotLike '*\New Folder1'} | Sort LastWriteTime | Group Directory | ForEach{$_.Group[0]}
ForEach($file in $Files){
$CompressedFilePath = $File.FullName + ".zip"
$file | Compress-Archive -DestinationPath $CompressedFilePath
Copy-Item $CompressedFilePath -Dest $Dest
}
或者,如果您只想提供要排除的文件夹列表,您可以对directoryName属性执行一些字符串操作以获取最后一个文件夹,并查看它是否在排除列表中,如:
$Excludes = @('New Folder','New Folder1')
$Dest = "C:\DigiHDBlah2"
$files = Get-ChildItem "$source\*\*.$filetype" | Where{$_.DirectoryName.Split('\')[-1] -NotIn $Excludes} | Sort LastWriteTime | Group Directory | ForEach{$_.Group[0]}
ForEach($file in $Files){
$CompressedFilePath = $File.FullName + ".zip"
$file | Compress-Archive -DestinationPath $CompressedFilePath
Copy-Item $CompressedFilePath -Dest $Dest
}