提取字符串对象的第n至第n个字符

TOG*_*EEK 5 powershell split

我有一个文件名,我希望提取其中的两个部分并添加到变量中,以便可以比较它们是否相同。

$name = FILE_20161012_054146_Import_5785_1234.xml 
Run Code Online (Sandbox Code Playgroud)

所以我要...

$a = 5785
$b = 1234

if ($a = $b) {
  # do stuff
}
Run Code Online (Sandbox Code Playgroud)

我尝试提取第36至第39个字符

Select-Object {$_.Name[35,36,37,38]}
Run Code Online (Sandbox Code Playgroud)

但我明白了

{5,7,8,5}

考虑过拆分但看起来很乱。

bri*_*ist 2

做这件事有很多种方法。正如 PetSerAl 所建议的,最直接的方法之一是.Substring()

$_.name.Substring(35,4)
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用方括号,正如您尝试做的那样,但它为您提供了一个[char]对象数组,而不是字符串。您可以使用-join并且可以使用范围来使其更容易:

$_.name[35..38] -join ''
Run Code Online (Sandbox Code Playgroud)

对于您正在做的事情,匹配模式,您还可以使用带有捕获组的正则表达式:

if ($_.name -match '_(\d{4})_(\d{4})\.xml$') {
    if ($Matches[1] -eq $Matches[2]) {
        # ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方式可能非常强大,但是如果您不熟悉,则需要了解有关正则表达式的更多信息。在本例中,它会在字符串末尾查找下划线_,后跟 4 位数字 ( 0-9),再后跟下划线和另外 4 位数字。.xml这些数字被括在括号中,以便单独捕获它们以便稍后引用(在 中$Matches)。