如何从Powershell中的数组中的每个元素中取出一个整数值?

时间:2016-11-24 00:40:37

标签: .net powershell

我使用以下代码

获得了一系列文件夹名称
 [Array]$j = Get-ChildItem J:\Samarth_Runs_CRCM\1_Banks | Where-Object { $_.Name -match '_' }

此阵列的输出如下

 Mode                LastWriteTime     Length Name                                                                                                                                                                                                                  
 ----                -------------     ------ ----                                                                                                                                                                                                                  
 d----        11/23/2016   5:34 PM            Point1_output                                                                                                                                                                                                         
 d----        11/23/2016   3:59 PM            Point2_output                                                                                                                                                                                                         
 d----        11/10/2016   1:07 PM            Point3_output                                                                                                                                                                                                         
 d----        11/10/2016   1:07 PM            Point4_output                                                                                                                                                                                                         
 d----        11/10/2016   1:07 PM            Point5_output

对于$j中的每个元素,我想取出一个整数值。例如,我希望Point1_output的输出为1,Point2_output的输出为2,依此类推。 我使用以下代码来提取所需的输出

 Foreach ($d in $j){
            $d.Substring(5,1)
         }

我收到以下错误

 Method invocation failed because [System.IO.DirectoryInfo] doesn't contain a method named 'Substring'.

期望的输出

 1
 2
 3
 4
 5

我不知道怎么解决这个问题。

答:我为这个问题道歉,我要感谢那些抽出时间对此发表评论的人。我相信有更有效的解决这个问题的方法,但现在以下答案就足够了。

 [string]$j = Get-ChildItem J:\Samarth_Runs_CRCM\1_Banks | Where-Object { $_.Name -match '_' }

 $k = $j -split ' '

 Foreach ($d in $k){
           $d.Substring(5,1)
     }

2 个答案:

答案 0 :(得分:0)

强制数组不是必需的。

$j = Get-ChildItem . -file  | Where-Object { $_.Name -match '(\d+)_' }|%{$matches[1]}

where -match中的(\d+)_是一个捕获组,代表下划线前面至少有一位数字。以下%= foreach输出找到的匹配[1]又称捕获组,$ matchhes [0]将是与下划线的整个匹配

输出

> $j
1
3
5
4
2

答案 1 :(得分:0)

您可以使用可与多个项目一起使用的$匹配,但可以单独评估每个项目。 但是如果你仍然希望直接在上下文中使用子字符串;请尝试首先进行tostring,因为System.Object没有任何方法子字符串。

$j = Get-ChildItem D:\Test | Where-Object { $_.Name -match '_' }|%{$_.Name.ToString().Substring(5,1)}

<强> 输出:
PS C:\ Windows \ system32&gt;附加$ J
1
2
3
4
5