我有一个很大的文件夹,我用我的脚本来整理这些文件,这个脚本可以精简文件,使之符合我的需要。这些项目的命名与以下示例类似:
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('(') )} }