Tengo 100000 archivos mp3 en un directorio, cada archivo contiene un nombre de archivo aleatorio y tengo otra hoja de Excel que contiene el nombre del archivo mp3 y a quién se asigna. ¿Hay alguna forma de desarrollar un script o un software de terceros que pueda ayudar a clasificar estos archivos en 3 carpetas diferentes?
En el excel
- Columna 1: Nombre de archivo = fasf4a5465.mp3, Columna 2 'Grupo de archivos' = Grupo1
- Columna 1: Nombre de archivo = fasdf35434.mp3, Columna 2 'Grupo de archivos' = Grupo2
- Columna 1: Nombre de archivo = vefbgwsbgg.mp3, Columna 2 'Grupo de archivos' = Grupo3
De acuerdo, entonces es un script que desea hacer esto, luego Powershell al rescate con la lógica a continuación.
Variables de script de PowerShell explicadas
$ExcelFile =
- Deberá hacer que esta variable apunte a su archivo
XLS
o (sí, cualquiera de ellos funcionará) que contiene las asignaciones o los valores de columna por fila cuya primera columna es el
nombre del archivo y la segunda columna es el nombre del grupo o las nuevas subcarpetas estos archivos se copiarán a.XLSX
MP3
$CSVFile =
- Deberá hacer que esta variable apunte al
CSV
archivo temporal convertido (en función de lo que está en Excel ( $ExcelFile
)) para que el resto de la lógica haga su magia. Si este archivo ya existe, pongo la lógica para sobrescribirlo para que no se preocupe por un nombre de archivo estático.
$MP3SourceDir =
- Tendrá que hacer que esta variable apunte a su
MP3
directorio de origen, donde estos archivos se tomarán inicialmente según los nombres de archivo de la primera columna de la hoja de cálculo de Excel. Advertencia: DEBE mantener la \$($_.first)
lógica en esta lógica; solo conecte la otra parte de la ruta.
$NewMP3Dir =
- Deberá hacer que esta variable apunte a la nueva ubicación donde se crearán las nuevas carpetas de la segunda columna [grupo] para los archivos de la primera columna
MP3
que se copiarán. Advertencia: DEBE mantener la \$($_.second)
lógica en esta lógica; solo conecte la otra parte de la ruta.
Ejemplo de script de 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
}
(Tenga en cuenta que esta es la fuente de la que obtuve la idea lógica de la conversión de xls a csv para luego leer los valores delimitados en el archivo csv para luego hacer el resto, así que también hice muchos ajustes)
(Este script esencialmente toma un archivo XLS o XLSX existente con dos valores de columna [mapeo] en la columna A y la columna B (todas las filas), y lo guarda en formato CSV en otro archivo CSV. Luego lee de ese archivo CSV y el CSV El valor de la columna A (por línea o fila) se utiliza como el nombre del archivo para copiar a otra carpeta (o subcarpeta), que es el valor CSV de la columna B (en la misma línea o fila). Cada línea o fila debe contener dos valores siendo el primero un nombre de archivo y el segundo un nombre de carpeta: estos son los valores en bucle ejecutando los comandos para copiar, etc.)
Fuente: PowerShell XLS a CSV
Lectura adicional de comandos de PowerShell