Powershell - 列出目录中的所有文件夹,在每个文件夹中提取最新的 .bak 文件,压缩它,将其复制到一个目录

杰弗里·谢尔曼

我有一个 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"
}

谢谢!

疯狂的技术员

我会做的是使用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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章