我有一个目录,其中包含以下文件夹:
000000000000000000,0001251557a1485767,0144dshbc,014758,1147857484752169和1234567890123458z
我使用这段代码根据文件夹的名称查找文件夹:
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个数字字符的文件夹的名称。因此,其结果应该是:
0144 014758,014758,0001251557a1485767和123456789012345678z
但是当我运行这些命令时,我会得到以下文件夹:
0001251557a1485767,0144dshbc和014758
我的问题是:我怎样才能找到"123456789012345678z",文件夹,它的名字里有18个数字,但末尾有一个字母。
我的目标是找到所有没有18个数字字符的文件夹。谢谢。
发布于 2016-04-28 04:56:44
此代码将找到名称中没有全部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()语句中。检查长度可以理解。match运算符查找一个字符串,该字符串以(由^)一个或多个(由+)数字(0-9表示)开头,并立即命中字符串的末尾( $)。
https://stackoverflow.com/questions/36904594
复制相似问题