3

У меня есть очень большая папка с файлами, которую я создаю с помощью моего скрипта, который уточняет файлы, вплоть до того, что мне нужно. Эти элементы названы так же, как в следующих примерах:

  • 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 ответ1

2

Я думаю, что ты рядом. Во-первых, просто удалите имя пути и расширения, используя свойство 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('(') )} }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .