在 Powershell 中,选择标识字符后的后续字符

在 Powershell 中,选择标识字符后的后续字符

我有一个很大的文件夹,我用我的脚本来整理这些文件,这个脚本可以精简文件,使之符合我的需要。这些项目的命名与以下示例类似:

  • Foo (Bar).txt
  • My File (This is) (My File).doc
  • Example (File) (Stuff) (Things).xml

我需要提取文件名的每个字符(但包括)第一个左括号“(”,但不包括文件扩展名。我希望的这个例子的输出是:

  • (Bar)
  • (This is) (My File)
  • (File) (Stuff) (Things)

我摆弄了下面的一行却无济于事,而且我不确定这是否是解决这个问题的最佳方法:

Get-ChildItem "*" | ForEach-Object { $_.SubString( $_.IndexOf('\(')+1 ) }

答案1

BaseName我认为你已经接近了。首先,只需使用的属性去除路径名称和扩展名FileInfo。然后从 返回的索引处开始获取子字符串IndexOf

Get-ChildItem * | ForEach-Object { $_.BaseName.SubString( $_.BaseName.IndexOf('(') ) }

尽管您可能希望在没有(的情况下添加一些错误处理。也许是这样的:

Get-ChildItem * | ForEach-Object { $start = $_.BaseName.IndexOf('('); if($start -ge 0){$_.BaseName.SubString( $_.BaseName.IndexOf('(') )} }

相关内容