2011-05-23 106 views
5

有沒有辦法在cmd或powershell中進行否定?換句話說,我想要的是找到所有不符合特定條件的文件(除了指定否定爲「 - 」的屬性)在名稱中說。如果有其他情況下可以使用的普遍否定,這將會有所幫助。另外,對於PowerShell,有沒有辦法獲得文件名列表,然後將其存儲爲可以排序等數組?cmd和powershell中的否定

道歉,問一些看起來很基本的東西。

回答

5

使用PowerShell的方法有很多否定的一套標準,但最好的方法視情況而定。在任何情況下使用單一的否定方法有時可能效率非常低。如果你想返回不超過05/01/2011的DLL舊的所有項目,你可以運行:

#This will collect the files/directories to negate 
$NotWanted = Get-ChildItem *.dll| Where-Object {$_.CreationTime -lt '05/01/2011'} 
#This will negate the collection of items 
Get-ChildItem | Where-Object {$NotWanted -notcontains $_} 

這可能是非常低效的,因爲通過管道的每個項目會相比,另一組項目。一個更有效的方式來獲得同樣的結果會是這樣做:

Get-ChildItem | 
    Where-Object {($_.Name -notlike *.dll) -or ($_.CreationTime -ge '05/01/2011')} 

正如@riknik說,檢查出:

get-help about_operators 
get-help about_comparison_operators 

此外,許多命令有一個「排除」參數。

# This returns items that do not begin with "old" 
Get-ChildItem -Exclude Old* 

要存儲在數組中,你可以進行排序,篩選,再利用等:

# Wrapping the command in "@()" ensures that an array is returned 
# in the event that only one item is returned. 
$NotOld = @(Get-ChildItem -Exclude Old*) 

# Sort by name 
$NotOld| Sort-Object 
# Sort by LastWriteTime 
$NotOld| Sort-Object LastWriteTime 

# Index into the array 
$NotOld[0] 
3

不知道我完全理解你在找什麼。也許這樣(在PowerShell中)?

get-childitem | where-object { $_.name -notlike "test*" } 

這將獲取當前目錄中的所有文件,其名稱不以短語test開頭。

要獲得運營商的詳細信息,可以使用PowerShell的內置幫助:

get-help about_operators 
get-help about_comparison_operators 
+0

偉大的作品,謝謝。 – soandos 2011-05-24 01:11:27