Selecione os caracteres após um caractere identificador em Powershell

3

Eu tenho uma pasta muito grande de arquivos, dos quais eu organizo com um script meu que refina os arquivos até o que eu preciso. Esses itens são nomeados de forma semelhante aos exemplos a seguir:

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

Eu preciso puxar cada caractere do nome do arquivo após (mas incluindo) o primeiro parêntese aberto "(" sem incluir a extensão do arquivo. Minha saída desejada para este exemplo seria:

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

Eu estava mexendo na seguinte linha sem sucesso, e não tenho certeza se isso seria a melhor maneira de resolver esse problema:

Get-ChildItem "*" | ForEach-Object { $_.SubString( $_.IndexOf('\(')+1 ) }
    
por root 29.09.2013 / 21:46

1 resposta

2

Eu acho que você está perto. Em primeiro lugar, limpe o nome do caminho e a extensão usando a propriedade BaseName de FileInfo . Em seguida, apenas pegue a substring começando no índice retornado por IndexOf :

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

embora você possa querer adicionar algum tratamento de erro nos casos em que não existe (. Talvez algo como isto:

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

Tags