У меня есть 100000 mp3-файлов в одном каталоге, каждый файл содержит произвольное имя файла, и у меня есть другой лист Excel, содержащий имя mp3-файла и имя, на которое он отображается. Есть ли способ разработать скрипт или стороннее программное обеспечение, которое может помочь разбить эти файлы на 3 разные папки
В Excel
- Столбец 1: имя файла = fasf4a5465.mp3, столбец 2 «Файловая группа» = группа1
- Столбец 1: Имя файла = fasdf35434.mp3, Столбец 2 «Файловая группа» = Группа2
- Столбец 1: Имя файла = vefbgwsbgg.mp3, Столбец 2 «Файловая группа» = Группа3
Итак, это скрипт, который вы хотите сделать, а затем Powershell для спасения с помощью приведенной ниже логики.
Объясненные переменные скрипта PowerShell
$ExcelFile =
- Вам нужно будет указать, чтобы эта переменная указывала на ваш файл
XLS
или XLSX
(да, любой из них будет работать), который содержит сопоставления, или значения столбца на строку, где первый столбец - это имя файла MP3
а второй - имя группы или новые подпапки, в которые будут скопированы эти файлы.
$CSVFile =
- Вам нужно будет сделать так, чтобы эта переменная указывала на преобразованный временный файл
CSV
(на основе того, что находится в Excel ($ExcelFile
)), чтобы остальная часть логики сделала его волшебным. Если этот файл уже существует, я поставлю логику, чтобы перезаписать его, чтобы не беспокоиться о статическом имени файла.
$MP3SourceDir =
- Вам нужно будет сделать так, чтобы эта переменная указывала на ваш исходный каталог
MP3
откуда эти файлы будут изначально извлечены, основываясь на именах файлов из первого столбца в таблице Excel. Предупреждение: вы ДОЛЖНЫ сохранить логику \$($_.first)
в этой логике - просто подключите только другую часть пути.
$NewMP3Dir =
- Вам нужно будет указать, чтобы эта переменная указывала на новое место, где будут создаваться новые папки [group] второго столбца для соответствующих файлов
MP3
первого столбца, которые будут скопированы. Предупреждение: вы ДОЛЖНЫ сохранить логику \$($_.second)
в этой логике - просто подключите только другую часть пути.
Пример скрипта PowerShell
$ExcelFile = "C:\Path\Excel Worksheet.xlsx"
$CSVFile = "C:\Path\ExportCSV.csv"
$Excel = New-Object -ComObject excel.application
$Excel.visible = $False
$Excel.displayalerts = $False
$WorkBook = $Excel.Workbooks.Open("$ExcelFile")
$WorkSheet = $Workbook.worksheets.Item(1)
If (Test-Path $CSVFile){
Remove-Item $CSVFile
}
$WorkBook.SaveAs("$CSVFile", 6)
$Excel.quit()
Import-Csv "$CSVFile" -Header ("first","second") | ForEach {
$MP3SourceDir = "D:\Path\SourceMP3\$($_.first)"
$NewMP3Dir = "D:\Path\NewMP3\$($_.second)"
New-Item -ItemType Dir "$NewMP3Dir" -Force
Copy-Item "$MP3SourceDir" -Destination "$NewMP3Dir\$($_.first)" -Force
}
(Обратите внимание, что это источник, из которого я получил логическую идею для преобразования xls в csv, чтобы затем прочитать значения с разделителями в файле csv, а затем сделать все остальное, поэтому я также внес много изменений)
(Этот сценарий по существу берет существующий файл XLS или XLSX с двумя значениями столбца [сопоставление] в столбце A и столбце B (все строки) и сохраняет его в формате CSV в другой файл CSV. Затем он считывает из этого файла CSV, а значение CSV столбца A (для каждой строки или строки) используется в качестве имени файла для копирования в другую папку (или подпапку), которое является значением CSV столбца B (в той же строке или строке).). Каждая строка или строка должна содержать два значения, первое из которых является именем файла, а второе - именем папки - это значения, циклически выполненные при выполнении команд на копирование и т.д.)
Источник: PowerShell XLS в CSV
Дальнейшее чтение команд PowerShell