我使用以下代码
获得了一系列文件夹名称 [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)
}
答案 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