Powershell divide o nome do arquivo em arrary

0

Eu tenho uma pasta com uma lista de todos os filmes dentro desta pasta no seguinte formato.

  • [1979] Nome do filme [P1] - Disney
  • [1979] Nome do filme [P1] [Edição do Diretor] - PTC
  • [1980] Nome do filme [P8] [Edição do diretor] - Teste

Eu gostaria de obter todos os filmes dessa pasta e passar por eles e colocá-los em três atributos diferentes Ano, nome, estúdio

Todas essas informações serão salvas em um único nome de arquivo do filme

É assim que eu salvarei as informações no arquivo

Name of the movie [P1]
1979
Disney

ou

Name of the movie [P1][Director Edition]
1979
PTC

Eu tento escrever este código

$regex = [regex]"\[(\w+)\](\w+\[\w+\])-(\w+)"
$name = "[TEST]TEST[TEST]-TEST"
$tokens = $regex.Match($name).groups[1,2,3] | Select -ExpandProperty Value

Que funcionou bem, mas ao executá-lo assim, mas não funciona quando eu corro em loop.

$name = dir *.mp4 | select BaseName
$regex = [regex]"\[(\w+)\](\w+\[\w+\])-(\w+)"
foreach ($n in $name)
{
    $file_name = $n.BaseName.ToString();
    $year, $title, $studio = $regex.Match($file_name).groups[1,2,3] | Select -ExpandProperty Value
}
    
por maj 27.02.2018 / 18:31

1 resposta

0

Eu não sou um especialista em regex, desculpe; no entanto, posso oferecer minha tentativa rudimentar:

$name = dir *.mp4 | select BaseName    ### no such files; see next herestrig workaround:
$name = @'
[year]TEST2[TEST3]-TEST4
[1979] Name of the movie [P1] - Disney
[1979] Name of the movie [P1]  [Director's Cut] - PTC
[1980] Name of the movie [P8][Director Edition] - Test Studios
'@ -split [System.Environment]::NewLine

$regex = [regex]"\[(\w+)\](\w+\[\w+\])-(\w+)"                          # wrong: original
$regex = [regex]"\[(\w+)\]([\s*\w]+[\s*\[\w+\]]+)\s*-\s*(\w+)"         # wrong: Apostrophe
$regex = [regex]"\[(\w+)\]\s*(\w+[\s*\[\w+'*\]]+?)\s*\-\s*([\s*\w+]+)" # works
$regex = [regex]"\[(\w+)\]\s*(\w+[\s*\[\w+'*\]]+?)\s*\-\s*(.*$)"       # works

foreach ($n in $name)
{
    $file_name = $n #.BaseName.ToString();
    $year, $title, $studio = $regex.Match($file_name).groups[1,2,3] |
        Select -ExpandProperty Value
    "$year,$title,$studio,"     ### debugging output
}

Saída :

PS D:\PShell> D:\PShell\SU98893.ps1
year,TEST2[TEST3],TEST4,
1979,Name of the movie [P1],Disney,
1979,Name of the movie [P1]  [Director's Cut],PTC,
1980,Name of the movie [P8][Director Edition],Test Studios,
    
por 14.03.2018 / 23:13

Tags