2016-04-28 39 views
0

我有一個包含以下文件夾的目錄:PowerShell的:在名稱的文件夾查找號碼

000000000000000000,0001251557a1485767,0144dshbc,014758,111147857484752169和123456789z

我使用此代碼根據名稱找到文件夾:

Get-ChildItem | Where-Object {$_.Name -notmatch "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"} 

我希望此代碼僅返回名稱不包含的文件夾的名稱正好有18個數字字符。所以,結果應該是這樣的:

0144dshbc,014758,0001251557a1485767和123456789z

但是當我運行這些命令,我​​會得到這些文件夾:

0001251557a1485767,0144dshbc和014758

我的問題:我怎樣才能找到文件夾「1234 56789z「,其中有18個數字,但在最後有一個字母。

我的目標是找到所有沒有18個數字字符的文件夾。 謝謝。

回答

1

此代碼將查找名稱中沒有完全18位全部數字字符的文件。詳細記錄將顯示每個值的評分。管道上返回不匹配的值。

$VerbosePreference = 'continue' 

$list = Get-ChildItem | Select-Object -ExpandProperty Name 
foreach ($item in $list) 
{ 

    if($item.Length -eq 18 -and $item -match '^[0-9]+$') 
    { 
     Write-verbose 'is both 18 chars and numeric' 
     Write-verbose "- $item, length: $($item.Length)" 
    } 
    else 
    { 
     Write-verbose 'is not 18 chars and numeric' 
     Write-verbose "- $item, length: $($item.Length)" 
     Write-Output $item 
    } 
} 

所有重要的邏輯都在IF()語句中。檢查長度是可以理解的。匹配運算符查找以(由^表示)一個或多個(用+表示的數字)([0-9])開頭的字符串並立即到達字符串的末尾($)。

+0

完美的作品,謝謝。 – ghostrat26