Создать папки на основе подстроки имени файла - PullRequest
0 голосов
/ 01 июля 2018

Попытка получить имя исполнителя из имени файла в каталоге с более чем 1000 MP3-файлами. Я пытаюсь использовать эту подстроку для создания каталога для копирования файлов.

Формат имени файла - "artistname - songtitle.mp3", исполнитель и заголовок разделены символом "-", и все они находятся в одном каталоге.

Пример:

Vic Damone - You And The Night And The Music.mp3
Sarah Vaughan - They Can't Take That Away From Me.mp3
...

Я хочу извлечь имя исполнителя в качестве подстроки, что я могу сделать с Split("-"), но не знаю, как это сделать для 1000+ файлов (все в одном каталоге).

Я хочу создать новые папки на основе имени исполнителя, а затем переместить все файлы этого исполнителя в правильную папку.

Таким образом, «Сара Воан - они не могут отнять это у меня .mp3» будет скопирована в папку «Сара Воан».

Вот то, с чем я добился успеха, по 1 файлу за раз:

Set-Location -Path L:\   # This is where I have all the files

$file = (Get-ChildItem).BaseName     # get rid of the mp3 extension --- this works

$artist = $file.Split("-")[15].Trim  # trim will remove the trailing space --- this works (for the 15th element as an example)

Мне нужен какой-то цикл для каждого файла в этом каталоге и какой-нибудь способ получить извлеченное имя исполнителя в качестве имени для нового каталога.

1 Ответ

0 голосов
/ 01 июля 2018
Get-ChildItem L:\ -Filter *.mp3 | ForEach-Object {
  # Extract the artist name from the file's base name.
  $artist = ($_.BaseName -split '-')[0].Trim()
  # Ensure that a subdirectory named for the artist exists
  # (creates it on demand; -Force ensures that the command is a no-op if
  # the subdir. already exists)
  $null = New-Item -Type Directory -Force $artist
  # Move the file at hand to the artist folder.
  Move-Item -LiteralPath $_.FullName -Destination $artist
}
...