I have 100000 mp3 files in one directory, each file contain a random filename , and I have another excel sheet containing the mp3 file's name and to whom it maps to. Is there any way to develop a script or 3rd party software can help categorize these files into 3 different folder
In the Excel
- Column 1: File name = fasf4a5465.mp3, Column 2 'File Group' = Group1
- Column 1: File name = fasdf35434.mp3, Column 2 'File Group' = Group2
- Column 1: File name = vefbgwsbgg.mp3, Column 2 'File Group' = Group3
Ok, então é um script que você quer fazer e Powershell para o resgate com a lógica abaixo.
Variáveis de script do PowerShell explicadas
-
%código%
- Você precisará fazer com que essa variável aponte para seu arquivo
$ExcelFile =
ouXLS
(sim, qualquer um funcionará) que contenha os mapeamentos, ou os valores da coluna por linha que a primeira coluna é aXLSX
nome do arquivo e a segunda coluna é o nome do grupo ou o novo subpastas esses arquivos serão copiados para.
- Você precisará fazer com que essa variável aponte para seu arquivo
-
%código%
- Você precisará fazer com que essa variável aponte para o arquivo temporário
MP3
convertido (com base no que está no Excel ($CSVFile =
)) para o restante da lógica fazer sua mágica. Se este arquivo já existir, eu coloco a lógica para sobrescrevê-lo, então não se preocupe com um nome de arquivo estático.
- Você precisará fazer com que essa variável aponte para o arquivo temporário
-
%código%
- Você precisará fazer com que essa variável aponte para o diretório
CSV
source no qual esse arquivo será inicialmente baseado nos nomes de arquivo da primeira coluna na planilha do Excel. Aviso: você DEVE manter a lógica$ExcelFile
nessa lógica - basta conectar apenas a outra parte do caminho.
- Você precisará fazer com que essa variável aponte para o diretório
-
%código%
- Você precisará fazer com que essa variável aponte para o novo local onde as novas pastas [grupo] segunda coluna serão criadas para os arquivos primeira coluna
$MP3SourceDir =
aplicáveis para ser copiado. Aviso: você DEVE manter a lógicaMP3
nessa lógica - basta conectar apenas a outra parte do caminho.
- Você precisará fazer com que essa variável aponte para o novo local onde as novas pastas [grupo] segunda coluna serão criadas para os arquivos primeira coluna
Exemplo de script do 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
}
(note que esta é a fonte da qual obtive a ideia lógica para a conversão xls para csv para depois ler os valores delimitados no ficheiro csv para depois fazer o resto, por isso fiz também muitos ajustes)
(Este script essencialmente pega um arquivo XLS ou XLSX existente com dois valores de coluna [mapeamento] na coluna A e coluna B (todas as linhas), e salva em formato CSV para outro arquivo CSV. esse arquivo CSV e o valor CSV da coluna A (por linha ou linha) são usados como o nome do arquivo a ser copiado para outra pasta (ou subpasta), que é o valor CSV da coluna B (na mesma linha ou linha). ou a linha deve conter dois valores sendo o primeiro um nome de arquivo e o segundo um nome de pasta - estes são os valores em loop através da execução dos comandos para copiar, etc.)
Fonte: PowerShell XLS para CSV
Leitura adicional de comandos do PowerShell