2017-04-21 40 views
0

我有一個PowerShell腳本,它可以獲取目錄中的文件夾列表,並將最新的.bak文件並將其複製到另一個目錄中。Powershell - 列出目錄中的所有文件夾,拉動每個文件夾中的最新.bak文件,將其壓縮,將其複製到目錄

有兩個文件夾,我不希望它尋找.bak文件。我如何排除這些文件夾?我已經嘗試了多種方式的排除陳述,我沒有任何運氣。

我想忽略的文件夾是「新建文件夾」和「新文件夾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" 
} 

謝謝!

回答

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 
} 

或者,如果你只想提供的文件夾列表中排除,你可以做的目錄名財產一點點的字符串操作只得到了最後一個文件夾,並查看它是否在排除列表中:

$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 
} 
相關問題