有沒有辦法在cmd或powershell中進行否定?換句話說,我想要的是找到所有不符合特定條件的文件(除了指定否定爲「 - 」的屬性)在名稱中說。如果有其他情況下可以使用的普遍否定,這將會有所幫助。另外,對於PowerShell,有沒有辦法獲得文件名列表,然後將其存儲爲可以排序等數組?cmd和powershell中的否定
道歉,問一些看起來很基本的東西。
有沒有辦法在cmd或powershell中進行否定?換句話說,我想要的是找到所有不符合特定條件的文件(除了指定否定爲「 - 」的屬性)在名稱中說。如果有其他情況下可以使用的普遍否定,這將會有所幫助。另外,對於PowerShell,有沒有辦法獲得文件名列表,然後將其存儲爲可以排序等數組?cmd和powershell中的否定
道歉,問一些看起來很基本的東西。
使用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]
不知道我完全理解你在找什麼。也許這樣(在PowerShell中)?
get-childitem | where-object { $_.name -notlike "test*" }
這將獲取當前目錄中的所有文件,其名稱不以短語test開頭。
要獲得運營商的詳細信息,可以使用PowerShell的內置幫助:
get-help about_operators
get-help about_comparison_operators
除了什麼@riknik提到的,對於獲取-ChildItem和文件的特定情況下的結果名稱,你應該使用-exclude
這將會更有效率。
Get-ChildItem c:\scripts\*.* -exclude *.txt,*.log
偉大的作品,謝謝。 – soandos 2011-05-24 01:11:27