[英]Get all directories in directory that has a numeric name with powershell
我首先要說我是Powershell的新手……我可以將所有目錄都保存在指定目錄中,但是我只需要獲取名稱為數字的目錄即可。 例:
1 - include
2 - include
3 - include
10 - include
LastFailed - exclude
我還需要按順序訂購它們,以便以后進行處理。
這是我到目前為止的內容:
$Dirs = Get-ChildItem -Path ..\..\..\builds -Attributes D
foreach($D in $Dirs)
{
Write-Host $D.Name
}
要僅獲取具有數字名稱的文件夾的列表,可以執行以下操作:
$Path = '..\..\..\builds'
$Dirs = Get-ChildItem -Path $Path -Attributes D |
Where-Object { $_.Name -match '^\d+$' } |
Sort-Object
$Dirs
上面的代碼使用Where-Object子句僅過濾出具有純數字名稱的文件夾。 它通過使用-match
運算符和正則表達式^\\d+$
來執行-match
操作,其中:
`^` --> start at the beginning of the line
`\d` --> look for numeric values (0-9)
`+` --> there must be 1 or more numeric values present
`$` --> the end of the string
代替\\d
也可以使用[0-9]
編寫代碼。代碼以Sort-Object
結尾,因為OP希望對文件夾列表進行排序。 因為我們不告訴您在此排序什么屬性,所以Powershell默認為Name。
上面將產生一個類似的列表:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 18-8-2018 16:13 1
d----- 18-8-2018 16:13 10
d----- 18-8-2018 16:13 2
d----- 18-8-2018 16:13 5
正如你可以看到,該列表按照屬性名稱排序,但..數字被視為字符串,因此“10”以下“1”。
我們在這里最可能想要做的是讓排序對象將名稱視為真實數字,而不是字符串。 為了解決此問題,我們添加了Select-Object
cmdlet,以創建具有所需屬性的自己的對象。
我們可以獲得通過管道到達的DirInfo對象的標准屬性,並且可以創建一個新的計算屬性。
在這里,我添加了一個名為SortIndex
的計算屬性,該屬性只是從Name轉換而來的數字值,然后我們將其用於數字排序:
$Dirs = Get-ChildItem -Path $Path -Attributes D |
Where-Object { $_.Name -match '^\d+$' } |
Select-Object -Property FullName, Name, LastWriteTime, @{Name = 'SortIndex'; Expression = {[int]$_.Name} } |
Sort-Object -Property SortIndex
$Dirs
現在,它生成了一個對象數組,這些對象在打印到控制台時如下所示:
FullName Name LastWriteTime SortIndex
-------- ---- ------------- ---------
D:\Temp\1 1 18-8-2018 16:13:22 1
D:\Temp\2 2 18-8-2018 16:13:25 2
D:\Temp\5 5 18-8-2018 16:13:28 5
D:\Temp\10 10 18-8-2018 16:13:31 10
希望這可以幫助。
您可以利用Where-Object
來過濾您的集合:
$dirs = Get-ChildItem -Path ..\..\..\builds -Directory |
Where-Object -Property Name -Match '\d'
此操作使用正則表達式來匹配數字類。
如果您只想以數字開頭的目錄名稱,則可以使用錨點 :
'^\d'
最后,您可以使用Sort-Object
對它們進行Sort-Object
:
$dirs = Get-ChildItem -Path ..\..\..\builds -Directory |
Where-Object -Property Name -Match '^\d' |
Sort-Object -Property Name
您可以通過明確說明起始數字來進一步增強這種排序:
-Property {[int]($_.Name -split '[^\d]')[0]}
在這種情況下,我們將分割第一個非數字字符並捕獲被分割的第一個片段(該片段應為表示為字符串的數字,因此我們將其轉換為整數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.