2016-02-23 56 views
0

我使用類似下面的腳本來排除文件夾。 問題是,有一個文件夾名稱作爲文件夾名稱,我只想排除文件夾而不是文件。例如在下面我想排除「B」文件夾而不是「B.txt」文件,而下面顯示的當前代碼不包括文件和文件夾。Powershell具有匹配文件名的文件夾排除

$exclude = @("*.cer") 
$excludeMatch = @("Member", "A", "B" , "C" , "D") 
[regex] $excludeMatchRegEx = ‘(?i)‘ + (($excludeMatch |foreach {[regex]::escape($_)}) –join 「|」) + ‘’ 
Get-ChildItem -Path $source -Recurse -Exclude $exclude | 
where { $excludeMatch -eq $null -or `enter code here`$_.FullName.Replace($Source, "") -notmatch $excludeMatchRegEx} | 
Copy-Item -Destination { 
if ($_.PSIsContainer) { 
    Join-Path $Dest `enter code here`$_.Parent.FullName.Substring($source.length) 
    } else { 
    Join-Path $Dest $_.FullName.Substring($source.length) 
} 
} -Force -Exclude $exclude 

回答

0

如果你想要做的是排除的文件夾,這是很容易做到:

Get-ChildItem -Path \Temp -Recurse | Where-Object {$_.PSIsContainer -eq $false}

如果你想使用正則表達式的化合物的本,你也可以是添加到您在哪裏-object聲明:

Get-ChildItem -Path \Temp -Recurse | Where-Object {$_.PSIsContainer -eq $false -and $_.Name -match $regexPattern }

你也扔-notmatch在那裏,如果你覺得你不希望某些事情秒。

有一點需要記住用PowerShell ......根據我的經驗,對於從shell執行命令來說,管道是非常棒的,但通常當你在你的個人命令字典中定義好的東西時(像Get-ADUser -Filter {GivenName -eq "Sam"}這樣的東西,但是當你嘗試做腳本類的時候並不是那麼好 - 在這種情況下,你最好使用Where-Object進行過濾,並選擇下面的項目你需要PowerShell有一個相當有特色的調試器,如果你想要一個良好的調試體驗,並且你不能像現在這樣來評估工作方式,特別是如果你遇到腳本問題或者一系列命令,調試器可以是你絕對最好的朋友,我強烈建議把事情分解成單個語句來做一些分析回覆。另外,Get-Member cmdlet可以說是Windows PowerShell中十大最有用的cmdlet之一(與Get-Help,Where-Object,Select-Object,Get-Command和其他一些)一樣, 。當你開始評估腳本如何運行來分析你正在使用的對象的屬性(在你的情況下,System.IO.FileInfo和System.IO.DirectoryInfo)時,它確實有幫助,以幫助減少以後抓頭的數量。

我希望這有助於!

編輯:

閱讀的評論後,我修改我的答案以便更好地適應問題說明。

如果您不希望保留源文件夾層次結構,那麼您可以運行Get-ChildItem -Recurse | Where-Object { $_.PSIsContainer -eq $false -and $_.Name -match $regexPattern } | Copy-Item -Destination **target_folder**。複製項目應該簡單地將輸出視爲全部屬於一個位置。注意,你也可以運行Copy-Item(以及大多數其他修改某些東西的cmdlet支持-WhatIf參數,在運行之前你需要驗證輸出結果)

+0

感謝您的回覆, – MAhmad

+0

問題是我有文件夾如下面的結構文件夾C:\ Customers \ Customer1 \ Config \ x1,X2現在我想複製文件夾「Config」中的一些文件並排除文件夾「X1」和「X2」。下一層將是C: \ Customers \ Customer2 \ Config \ x1,x2,所以我想再次排除「X1」,「X2」並複製好友。底線是有幾個配置文件在每個customers文件夾下重複,我想僅複製這些文件有幾個文件夾也與我想排除的其中一個文件的名稱(僅文件夾)相匹配而不是文件 – MAhmad

+0

如果我理解你,你只需要頂層文件vel dir?或者加上子文件夾,但不是兩個文件夾? – PSGuy

相關問題