У меня есть папка со списком всех фильмов в этой папке в следующем формате.

  • [1979] Название фильма [P1] - Дисней
  • [1979] Название фильма [P1] [Режиссерское издание] - PTC
  • [1980] Название фильма [P8] [Режиссерское издание] - Тест

Я хотел бы собрать все фильмы в этой папке, просмотреть их и поместить их в три разных атрибута: Год, Имя, Студия.

Вся эта информация будет сохранена в одно имя файла фильма

Вот как я хочу сохранить информацию в файл

Name of the movie [P1]
1979
Disney

или же

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

Я пытаюсь написать этот код

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

Который работал нормально, но при запуске, как это, но не работает, когда я запускаю его в цикле

$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
}

1 ответ1

0

Я не эксперт по регулярным выражениям, извините; Тем не менее, я могу предложить свою рудиментарную попытку:

$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
}

Выход:

PS D:\PShell> D:\PShell\SU\1298893.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,

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