El único requisito es que tus archivos deberán estar etiquetados, es decir, deberán contener los datos del Artista y del Album al que pertenecen.
$controlssource = 1
$controlsdest = 1
$controlsdest = 1
$objshell = New-Object -ComObject Shell.Application
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
$objform = New-Object System.Windows.Forms.Form
$objform.Text = “Move Audio Data”
$objform.Size = New-Object System.Drawing.Size(300,260)
$objform.StartPosition = “CenterScreen”
$objform.Text = “Move Audio Data”
$objform.Size = New-Object System.Drawing.Size(300,260)
$objform.StartPosition = “CenterScreen”
$objform.KeyPreview = $True
$objform.Add_KeyDown({if ($_.KeyCode -eq “Escape”)
{$objform.Close()}})
$objform.Add_KeyDown({if ($_.KeyCode -eq “Escape”)
{$objform.Close()}})
$movebutton = New-Object System.Windows.Forms.Button
$movebutton.Location = New-Object System.Drawing.Size(20,170)
$movebutton.Size = New-Object System.Drawing.Size(75,23)
$movebutton.Text = “Move”
$movebutton.Add_Click({$x=”move”;$objform.Close()})
$objform.Controls.Add($movebutton)
$movebutton.Location = New-Object System.Drawing.Size(20,170)
$movebutton.Size = New-Object System.Drawing.Size(75,23)
$movebutton.Text = “Move”
$movebutton.Add_Click({$x=”move”;$objform.Close()})
$objform.Controls.Add($movebutton)
$copybutton = New-Object System.Windows.Forms.Button
$copybutton.Location = New-Object System.Drawing.Size(100,170)
$copybutton.Size = New-Object System.Drawing.Size(75,23)
$copybutton.Text = “Copy”
$copybutton.Add_Click({$x=”copy”;$objform.Close()})
$objform.Controls.Add($copybutton)
$copybutton.Location = New-Object System.Drawing.Size(100,170)
$copybutton.Size = New-Object System.Drawing.Size(75,23)
$copybutton.Text = “Copy”
$copybutton.Add_Click({$x=”copy”;$objform.Close()})
$objform.Controls.Add($copybutton)
$cancelbutton = New-Object System.Windows.Forms.Button
$cancelbutton.Location = New-Object System.Drawing.Size(180,170)
$cancelbutton.Size = New-Object System.Drawing.Size(75,23)
$cancelbutton.Text = “Cancel”
$cancelbutton.Add_Click({$a=0;$x=”nil”;$objform.Close()})
$objform.Controls.Add($cancelbutton)
$cancelbutton.Location = New-Object System.Drawing.Size(180,170)
$cancelbutton.Size = New-Object System.Drawing.Size(75,23)
$cancelbutton.Text = “Cancel”
$cancelbutton.Add_Click({$a=0;$x=”nil”;$objform.Close()})
$objform.Controls.Add($cancelbutton)
$objlabel = New-Object System.Windows.Forms.Label
$objlabel.Location = New-Object System.Drawing.Size(10,110)
$objlabel.Size = New-Object System.Drawing.Size(280,40)
$objlabel.Text = “Please specify whether you want to copy or to move your files. Moving the files will remove them from their original directory.”
$objform.Controls.Add($objlabel)
$objlabel.Location = New-Object System.Drawing.Size(10,110)
$objlabel.Size = New-Object System.Drawing.Size(280,40)
$objlabel.Text = “Please specify whether you want to copy or to move your files. Moving the files will remove them from their original directory.”
$objform.Controls.Add($objlabel)
if ($controlssource -eq 1){
$objlabel2 = New-Object System.Windows.Forms.Label
$objlabel2.Location = New-Object System.Drawing.Size(10,10)
$objlabel2.Size = New-Object System.Drawing.Size(280,15)
$objlabel2.Text = “Path to file origin:”
$objform.Controls.Add($objlabel2)}
$objlabel2 = New-Object System.Windows.Forms.Label
$objlabel2.Location = New-Object System.Drawing.Size(10,10)
$objlabel2.Size = New-Object System.Drawing.Size(280,15)
$objlabel2.Text = “Path to file origin:”
$objform.Controls.Add($objlabel2)}
if ($controlssource -eq 1){
$objtextbox = New-Object System.Windows.Forms.TextBox
$objtextbox.Location = New-Object System.Drawing.Size(10,25)
$objtextbox.Size = New-Object System.Drawing.Size(230,20)
$objform.Controls.Add($objtextbox)}
$objtextbox = New-Object System.Windows.Forms.TextBox
$objtextbox.Location = New-Object System.Drawing.Size(10,25)
$objtextbox.Size = New-Object System.Drawing.Size(230,20)
$objform.Controls.Add($objtextbox)}
if ($controlsdest -eq 1){
$objlabel3 = New-Object System.Windows.Forms.Label
$objlabel3.Location = New-Object System.Drawing.Size(10,50)
$objlabel3.Size = New-Object System.Drawing.Size(280,15)
$objlabel3.Text = “Path to music library:”
$objform.Controls.Add($objlabel3)}
$objlabel3 = New-Object System.Windows.Forms.Label
$objlabel3.Location = New-Object System.Drawing.Size(10,50)
$objlabel3.Size = New-Object System.Drawing.Size(280,15)
$objlabel3.Text = “Path to music library:”
$objform.Controls.Add($objlabel3)}
if ($controlsdest -eq 1){
$objtextbox2 = New-Object System.Windows.Forms.TextBox
$objtextbox2.Location = New-Object System.Drawing.Size(10,65)
$objtextbox2.Size = New-Object System.Drawing.Size(230,20)
$objform.Controls.Add($objtextbox2)}
$objtextbox2 = New-Object System.Windows.Forms.TextBox
$objtextbox2.Location = New-Object System.Drawing.Size(10,65)
$objtextbox2.Size = New-Object System.Drawing.Size(230,20)
$objform.Controls.Add($objtextbox2)}
if ($controlssource -eq 1){
$browsebutton1 = New-Object System.Windows.Forms.Button
$browsebutton1.Location = New-Object System.Drawing.Size(250,24)
$browsebutton1.Size = New-Object System.Drawing.Size(26,22)
$browsebutton1.Text = “…”
$browsebutton1.Add_Click({$fold1 = $objshell.BrowseForFolder(0, “Select Folder”, 0, “”);$objtextbox.Text = $fold1.self.path})
$objform.Controls.Add($browsebutton1)}
$browsebutton1 = New-Object System.Windows.Forms.Button
$browsebutton1.Location = New-Object System.Drawing.Size(250,24)
$browsebutton1.Size = New-Object System.Drawing.Size(26,22)
$browsebutton1.Text = “…”
$browsebutton1.Add_Click({$fold1 = $objshell.BrowseForFolder(0, “Select Folder”, 0, “”);$objtextbox.Text = $fold1.self.path})
$objform.Controls.Add($browsebutton1)}
if ($controlsdest -eq 1){
$browsebutton2 = New-Object System.Windows.Forms.Button
$browsebutton2.Location = New-Object System.Drawing.Size(250,64)
$browsebutton2.Size = New-Object System.Drawing.Size(26,22)
$browsebutton2.Text = “…”
$browsebutton2.Add_Click({$fold2 = $objshell.BrowseForFolder(0, “Select Folder”, 0, “”);$objtextbox2.Text = $fold2.self.path})
$objform.Controls.Add($browsebutton2)}
$browsebutton2 = New-Object System.Windows.Forms.Button
$browsebutton2.Location = New-Object System.Drawing.Size(250,64)
$browsebutton2.Size = New-Object System.Drawing.Size(26,22)
$browsebutton2.Text = “…”
$browsebutton2.Add_Click({$fold2 = $objshell.BrowseForFolder(0, “Select Folder”, 0, “”);$objtextbox2.Text = $fold2.self.path})
$objform.Controls.Add($browsebutton2)}
$objform.Controls.Add($copybutton)
#$objform.topmost = $True
$objform.Add_Shown({$objform.Activate()})
[void] $objform.ShowDialog()
[void] $objform.ShowDialog()
$sFolder = $objtextbox.Text
$mFolder = $objtextbox2.Text
#$sFolder = “C:\Users\Public\Music\Sample Music”
#$mFolder = “C:\Users\howtoforge\Music”
$objfolder = $objshell.namespace($sFolder)
$mFolder = $objtextbox2.Text
#$sFolder = “C:\Users\Public\Music\Sample Music”
#$mFolder = “C:\Users\howtoforge\Music”
$objfolder = $objshell.namespace($sFolder)
if ($X -eq “nil”) {exit}
foreach ($strfilename in $objfolder.items())
{
for ($a ; $a -le 266; $a++)
{
if ($objfolder.getDetailsOf($objfolder.items, $a) -eq “Contributing artists”)
#if ($objfolder.getDetailsOf($objfolder.items, $a) -eq “Albuminterpret”)
{
$artist = $objfolder.getDetailsOf($strfilename, $a)
}
if($objfolder.getDetailsOf($objfolder.items, $a) -eq “Album“)
{
$album = $objfolder.getDetailsOf($strfilename, $a)
}
}
if ($artist -and $album)
{
if (!(test-path($mFolder + “\” + $artist + “\” + $album + $strfilename)))
{
new-item($mFolder + “\” + $artist + “\” + $album) -itemtype directory
if($x -eq “copy”)
{
copy-item $strfilename.Path ($mFolder + “\” + $artist + “\” + $album)
}
if($x -eq “move”)
{
move-item $strfilename.Path ($mFolder + “\” + $artist + “\” + $album)
}
}
}
clear-variable artist
clear-variable album
$a=0
}
{
for ($a ; $a -le 266; $a++)
{
if ($objfolder.getDetailsOf($objfolder.items, $a) -eq “Contributing artists”)
#if ($objfolder.getDetailsOf($objfolder.items, $a) -eq “Albuminterpret”)
{
$artist = $objfolder.getDetailsOf($strfilename, $a)
}
if($objfolder.getDetailsOf($objfolder.items, $a) -eq “Album“)
{
$album = $objfolder.getDetailsOf($strfilename, $a)
}
}
if ($artist -and $album)
{
if (!(test-path($mFolder + “\” + $artist + “\” + $album + $strfilename)))
{
new-item($mFolder + “\” + $artist + “\” + $album) -itemtype directory
if($x -eq “copy”)
{
copy-item $strfilename.Path ($mFolder + “\” + $artist + “\” + $album)
}
if($x -eq “move”)
{
move-item $strfilename.Path ($mFolder + “\” + $artist + “\” + $album)
}
}
}
clear-variable artist
clear-variable album
$a=0
}
A menudo ocurre que tus archivos de audio los dejaste en tu carpeta de descargas de tu navegador o en la carpeta de archivos recibidos de la mensajería instantánea, lugares en el que por lo general no pertenecen.
Este script es capaz de moverlos a tu biblioteca de música y ponerlos en las carpetas correspondientes que lleva el nombre del artista y el álbum en el que están. Si la carpeta con el nombre del artista no existe, el script lo creará. Lo mismo con el álbum de dicho artista.
El script se ejecuta para cada archivo de audio en la carpeta especificada que posee ambas detalles en sus etiquetas, tales como el artista (Contributing Artist y Album (puedes cambiarlo para buscar diferentes detalles, pero esto no siempre tiene sentido ya que el guión luego crea carpetas en la biblioteca en función de esos datos - hay diferentes detalles artista entre los cuales se puede elegir.
Para cambiarlos, sólo cambia la única instancia de ellos en el script. Ajusta sus nombres al idioma del sistema!). Si los archivos tienen ambos datos especificados, el script va a la biblioteca y, si no está presente, se crea una carpeta con el título del artista, una carpeta con el título del álbum dentro de éste. Puedes escoger copiar o mover el archivo a esa ubicación.
Si tienes carpetas fijas que no quieres ver de nuevo cada vez que se ejecute el script, comenta las dos primeras líneas y las dos líneas en negritas, y elimina el comentario de las dos líneas debajo de estas últimas.
Cambia la ruta dada allí a la ruta de las carpetas que tu desees. También puedes descomentar uno de ellos, sólo asegúrate de comentar las líneas correctas cuando se quite uno.
Para ejecutar el script, copiar y pegarlo en un bloc de notas y guardarlo como .ps1 (selecciona Todos los archivos en el menú desplegable donde dice Tipo (Type). A continuación, haz clic en el archivo y ejecútalo con Windows PowerShell. Si no funciona, puede que tengas que cambiar la política de ejecución si no lo has hecho. Para lograr esto, busca el powershell en la búsqueda barra de menú de Windows y haz clic para ejecutarlo como administrador:
set-executionpolicy remotesigned
y ejecuta el script de nuevo. El script funcionó bien en una máquina de 64 bits con Windows 7 Professional con PowerShell 1.0 instalado, si alguien tiene alguna mejora, por favor házlo. Se sociable, ¡Comparte!
