Behöver hjälp med ett enkelt(?) kopieringscript i Powershell

Permalänk
Medlem

Behöver hjälp med ett enkelt(?) kopieringscript i Powershell

Så här är det:

Jag har en extern USB-hårddisk med ca 20000 MP3-låtar som ligger ordnade på följande vis:
[Root]->[Bokstav]->[Artist]->[Album] och under varje album finns sen alla låtar. [Bokstav] är alltså mellan A-Ö. Albumnamnet kan vara ganska långt och står i formatet [Årtal - Titel - Artist]
Det finns alltså i runda slängar 20000 låtar i närmare 2000 kataloger, runt 150GB sammanlagt.

Men! Nu har jag skaffat en bilstereo som bara har stöd för 999 mappar (i max 7 nivåer) och det får finnas max 999 filer per mapp så jag måste göra om trädstrukturen på nåt sätt för att kunna komma åt alla mina låtar.
Då tänkte jag så här: om jag kopierar (flyttar) in varje albums låtar under själva artisten och struntar i att dom blir i en enda röra där (alla är taggade) så får det duga. Dom tomma mapparna ska sedan tas bort. Nya strukturen blir alltså:
[Root]->[Bokstav]->[Artist] och där ligger sen alla låtar.
Det finns också andra filer där som t ex playlists; *.m3u och ibland lite bilder på omslag *.jpg/*.png eller texter *.txt men det är alltså bara MP3-filerna som är av intresse, resten ska bort. Ingen enskild artist har över 999 låtar.
Skulle det förkomma att två filer råkar heta samma så får det bildas en kopia med ett nytt namn på den senare med tillägget (1) i slutet av filnamnet - som det normalt brukar göra.

Jag har suttit med XCOPY och ROBOCOPY och även lite gammaldags BAT-programmering och testat alla möjliga växlar och varianter men inte fått till det men jag fattar att för den som behärskar Powershell så är detta en bit-av-kaka så jag skulle vilja ha hjälp med detta. Jag kan i princip nada om PS. Kanske finns fler som har en liknande situation?

Tack på förhand!

Permalänk

PS

Skrivet av zoombo:

Så här är det:

Jag har en extern USB-hårddisk med ca 20000 MP3-låtar som ligger ordnade på följande vis:
[Root]->[Bokstav]->[Artist]->[Album] och under varje album finns sen alla låtar. [Bokstav] är alltså mellan A-Ö. Albumnamnet kan vara ganska långt och står i formatet [Årtal - Titel - Artist]
Det finns alltså i runda slängar 20000 låtar i närmare 2000 kataloger, runt 150GB sammanlagt.

Men! Nu har jag skaffat en bilstereo som bara har stöd för 999 mappar (i max 7 nivåer) och det får finnas max 999 filer per mapp så jag måste göra om trädstrukturen på nåt sätt för att kunna komma åt alla mina låtar.
Då tänkte jag så här: om jag kopierar (flyttar) in varje albums låtar under själva artisten och struntar i att dom blir i en enda röra där (alla är taggade) så får det duga. Dom tomma mapparna ska sedan tas bort. Nya strukturen blir alltså:
[Root]->[Bokstav]->[Artist] och där ligger sen alla låtar.
Det finns också andra filer där som t ex playlists; *.m3u och ibland lite bilder på omslag *.jpg/*.png eller texter *.txt men det är alltså bara MP3-filerna som är av intresse, resten ska bort. Ingen enskild artist har över 999 låtar.
Skulle det förkomma att två filer råkar heta samma så får det bildas en kopia med ett nytt namn på den senare med tillägget (1) i slutet av filnamnet - som det normalt brukar göra.

Jag har suttit med XCOPY och ROBOCOPY och även lite gammaldags BAT-programmering och testat alla möjliga växlar och varianter men inte fått till det men jag fattar att för den som behärskar Powershell så är detta en bit-av-kaka så jag skulle vilja ha hjälp med detta. Jag kan i princip nada om PS. Kanske finns fler som har en liknande situation?

Tack på förhand!

Rekommenderar dig att göra ett ärligt första försök i powershell, och skapa en tråd på stackoverflow. Där kryllar det av hjälpsamma experter. Men var noga med att följa deras standarder för hur ett inlägg ska se ut etc.
Mvh

Visa signatur

#nul

Permalänk
Legendarisk

@zoombo: Svängde ihop ett script som jag tror gör vad du ber om, men jag tog mig friheten att inkludera albumets namn i de slutgiltiga filnamnen utifall att det hjälper dig att spela upp låtarna i rätt ordning i bilen. Du kan ändra hur namnen genereras i funktionen Copy-Track nedan.

Param( [Parameter( Mandatory=$true, HelpMessage=( "Mappen att kopiera från." ), Position=0 )] [string] $Source, [Parameter( Mandatory=$true, HelpMessage=( "Destinationen för de nya filerna. Om mappen redan existerar så " + "måste den manuellt raderas innan scriptet körs." ), Position=1 )] [string] $Destination ) if((Test-Path $Source) -eq $false) { throw "Källan saknas." } if((Test-Path $Destination) -eq $true) { throw "Destinationen existerar redan." } # Skapa destinationsmappen: [void](New-Item -ItemType Directory -Path $Destination) $Source = Resolve-Path $Source $Destination = Resolve-Path $Destination # # Kopierar ett enskilt spår. # # $root: Den högsta nivån i destinationsmappen. # $source: Det fullständiga gamla filnamnet. # $bokstav: <Del av sökväg> (mappnamn) # $artist: <Del av sökväg> (mappnamn) # $album: <Del av sökväg> (mappnamn) # $track <Del av sökväg> (filnamn) # function Copy-Track($root, $source, $bokstav, $artist, $album, $track) { # Formatera mappnamnet för kopian: $path = $root | Join-Path -ChildPath $bokstav | Join-Path -ChildPath $artist # Skapa mappen om den inte redan finns: if((Test-Path $path) -eq $false) { [void](New-Item -ItemType Directory -Path $path) } # Extrahera årtal och titel ur albumnamnet: $album | sls -Pattern "^(\d+)\s*-\s*(.+?)(?=\s*-)" -AllMatches | %{ $year = $_.Matches.Groups[1].Value.Trim() $title = $_.Matches.Groups[2].Value.Trim() # Extrahera namn och ändelse ur spårnamnet: $track | sls -Pattern "^([^.]+)\.(.+)$" -AllMatches | %{ $name = $_.Matches.Groups[1].Value.Trim() $ext = $_.Matches.Groups[2].Value.Trim() $num = 0 # Gör ett första försök utfrån album och spår: $test = "{0} - {1}" -f $title, $track $target = Join-Path $path $test # Om filnamnet redan existerar i den nya mappen så genereras ett # nytt alternativ utifrån en räknare: while(Test-Path $target) { $num += 1 $test = "{0} - {1} ({2}).{3}" -f $title, $name, $num, $ext $target = Join-Path $path $test } # Kopiera filen: Copy-Item -Path $source -Destination $target } } } # # Listar alla spår i källan. # function Get-Tracks($source) { # Hämta alla bokstavsmappar ... Get-ChildItem -Path $source -Directory | %{ $bokstav = $_.Name # ... alla artister ... Get-ChildItem -Path $_.FullName -Directory | %{ $artist = $_.Name # ... alla album ... Get-ChildItem -Path $_.FullName -Directory | %{ $album = $_.Name # ... och alla filer med ändelsen .mp3: Get-ChildItem -Path $_.FullName -File | ?{ $_.Name -Match "\.mp3$" } | %{ @{ source = $_.FullName; track = $_.Name; album = $album; artist = $artist; bokstav = $bokstav; } } } } } } # Hitta alla spår och kopiera dessa till destinationen: Get-Tracks $Source | %{ Copy-Track ` $Destination ` $_.source ` $_.bokstav ` $_.artist ` $_.album ` $_.track }

Script

Källa

├───A │ ├───Artist 01 │ │ ├───1990 - Album 01 - Artist 01 │ │ │ 01 - Track.mp3 │ │ │ 02 - Track.mp3 │ │ │ 03 - Track.mp3 │ │ │ cover.jpg │ │ │ playlist.m3u │ │ │ │ │ ├───1990 - Album 02 - Artist 01 │ │ │ 01 - Track.mp3 │ │ │ 02 - Track.mp3 │ │ │ 03 - Track.mp3 │ │ │ cover.jpg │ │ │ playlist.m3u │ │ │ │ │ └───1990 - Album 03 - Artist 01 │ │ 01 - Track.mp3 │ │ 02 - Track.mp3 │ │ 03 - Track.mp3 │ │ cover.jpg │ │ playlist.m3u [...]

Resultat

├───A │ ├───Artist 01 │ │ Album 01 - 01 - Track.mp3 │ │ Album 01 - 02 - Track.mp3 │ │ Album 01 - 03 - Track.mp3 │ │ Album 02 - 01 - Track.mp3 │ │ Album 02 - 02 - Track.mp3 │ │ Album 02 - 03 - Track.mp3 │ │ Album 03 - 01 - Track.mp3 │ │ Album 03 - 02 - Track.mp3 │ │ Album 03 - 03 - Track.mp3 [...]

Exempel

Användning

> ./scriptnamn.ps1 -Source /mapp/att/kopiera/från -Destination /mapp/att/kopiera/till

Om du får upp ett meddelande om att scripts inte får köras på systemet så kan du åtgärda det genom att som administratör köra kommandot Set-ExecutionPolicy -ExecutionPolicy RemoteSigned.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Biberu:

@zoombo: Svängde ihop ett script som jag tror gör vad du ber om, men jag tog mig friheten att inkludera albumets namn i de slutgiltiga filnamnen utifall att det hjälper dig att spela upp låtarna i rätt ordning i bilen. Du kan ändra hur namnen genereras i funktionen Copy-Track nedan.

Stort tack!
Blev längre än jag trodde.
Ska genast testa!

Permalänk
Medlem

Hm. Nä, får det inte att funka. Scriptet går men inget görs förutom att det skapas en tom destinationsmapp. Har angett Source i formen
E:\MP3\A
eller E:\MP3\A\
även E:\MP3\A\*.*
men inget händer.

Permalänk
Legendarisk

@zoombo: Scriptet förutsätter att bokstavsmapparna ligger direkt under vad du anger som källa. Prova det här istället:

> ./script.ps1 -Source E:\MP3 -Destination E:\Temp

Tips: Ett enkelt sätt att se vad scripts gör och vad olika variabler innehåller är att skriva ut meddelanden till terminalen med Write-Host. Ett annat alternativ kan vara att använda ISE (men om du inte har tidigare erfarenhet av debuggers så kan det bli en del att sätta sig in i). Lycka till.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Kommit lite längre. När jag väljer en underkatalog som start t ex E:\MP3 och destination E:\OUT så skapas det mycket riktigt en korrekt trädstruktur under OUT men inga filer kopieras så nåt i scriptet måste fattas? Eller ska man ange vilken typ av filer som ska kopieras?
ISE har en debugfunktion men den är inte speciellt användbar då scriptet ju exekveras korrekt. Write-host visar ingenting.

Permalänk
Legendarisk

@zoombo: Eftersom att mapparna skapas så vet du att den kommer så långt in i funktionen Copy-Track (rad 52 i exemplet). Stycket efter det försöker filtrera ut årtal, album och artist ur nästa mappnamn och jag gissar att det är det som misslyckas. Har de verkligen formatet årtal - titel - artist?

Att Write-Host inte visar något låter underligt. Hur ser din kod ut? Ger du den något värde att skriva ut? Hur som helst, prova att skriva ut albumvariabeln före / efter filtret på rad 56 för att se om den passerar det:

[...] Write-Host $album $album | sls -Pattern "^(\d+)\s*-\s*(.+?)(?=\s*-)" -AllMatches | %{ Write-Host "OK!" [...]

Vad får du för resultat av det?

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

@Biberu: Resultatet blir så här:
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1977 - Album1
1978 - Album2
1978 - Album2
1978 - Album2
1978 - Album2
1978 - Album2
1978 - Album2
1978 - Album2
1978 - Album2
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1979 - Album3
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1974 - Album1
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
1976 - Album2
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1
2000 - Album1

Formatet är exakt så här: (tar gruppen .38 Special då dom är lite speciella och börjar sitt namn med en punkt):
Mappen i detta fall heter 0-9 (alla andra mappar heter bara nåt med en bokstav men jag har testat att flytta dessa till en mapp som heter A, ingen skillnad)
Sen heter nästa mapp .38 Special
Under den finns album. I mitt testfall ovan hade jag döpt om mapparna till AlbumX för att testa men det verkar inte ha spelat nån roll. Ordinarie mappnamn är
1978 - Special Delivery [.38 Special]
och i nästa mapp ligger sen alla låtar.

Kan min otydlighet om formattering ha fuckat upp din sortering?

Permalänk
Legendarisk

@zoombo: Ah, jag förstod det som att albumets namn följdes av ett bindestreck samt artistens namn. Mönstret på rad 56 är ett så kallat reguljärt uttryck som syftar till att dela upp mappens namn i tre delar: årtal, album och artist, avskiljda med bindestreck, och om det inte ger någon träff så händer inget alls. Om mapparna innehåller hakparenteser så får vi uppdatera det och stuva om lite grann för att pwsh ska tolka allt som vi vill:

Param( [Parameter( Mandatory=$true, HelpMessage=( "Mappen att kopiera från." ), Position=0 )] [string] $Source, [Parameter( Mandatory=$true, HelpMessage=( "Destinationen för de nya filerna. Om mappen redan existerar så " + "måste den manuellt raderas innan scriptet körs." ), Position=1 )] [string] $Destination ) if((Test-Path $Source) -eq $false) { throw "Källan saknas." } if((Test-Path $Destination) -eq $true) { throw "Destinationen existerar redan." } # Skapa destinationsmappen: [void](New-Item -ItemType Directory -Path $Destination) $Source = Resolve-Path $Source $Destination = Resolve-Path $Destination # # Kopierar ett enskilt spår. # # $root: Den högsta nivån i destinationsmappen. # $source: Det fullständiga gamla filnamnet. # $bokstav: <Del av sökväg> (mappnamn) # $artist: <Del av sökväg> (mappnamn) # $album: <Del av sökväg> (mappnamn) # $track <Del av sökväg> (filnamn) # function Copy-Track($root, $source, $bokstav, $artist, $album, $track) { # Formatera mappnamnet för kopian: $path = $root | Join-Path -ChildPath $bokstav | Join-Path -ChildPath $artist # Skapa mappen om den inte redan finns: if((Test-Path $path) -eq $false) { [void](New-Item -ItemType Directory -Path $path) } # Extrahera årtal och titel ur albumnamnet: $album | sls -Pattern "^(\d+)\s*-\s*(.+?)(?=\s*\[)" -AllMatches | %{ $year = $_.Matches.Groups[1].Value.Trim() $title = $_.Matches.Groups[2].Value.Trim() # Extrahera namn och ändelse ur spårnamnet: $track | sls -Pattern "^([^.]+)\.(.+)$" -AllMatches | %{ $name = $_.Matches.Groups[1].Value.Trim() $ext = $_.Matches.Groups[2].Value.Trim() $num = 0 # Gör ett första försök utfrån album och spår: $test = "{0} - {1}" -f $title, $track $target = Join-Path $path $test # Om filnamnet redan existerar i den nya mappen så genereras ett # nytt alternativ utifrån en räknare: while(Test-Path $target) { $num += 1 $test = "{0} - {1} ({2}).{3}" -f $title, $name, $num, $ext $target = Join-Path $path $test } # Kopiera filen: Copy-Item -LiteralPath $source -Destination $target } } } # # Listar alla spår i källan. # function Get-Tracks($source) { # Hämta alla bokstavsmappar ... Get-ChildItem -LiteralPath $source -Directory | %{ $bokstav = $_.Name # ... alla artister ... Get-ChildItem -LiteralPath $_.FullName -Directory | %{ $artist = $_.Name # ... alla album ... Get-ChildItem -LiteralPath $_.FullName -Directory | %{ $album = $_.Name # ... och alla filer med ändelsen .mp3: Get-ChildItem -LiteralPath $_.FullName -File | ?{ $_.Name -Match "\.mp3$" } | %{ @{ source = $_.FullName; track = $_.Name; album = $album; artist = $artist; bokstav = $bokstav; } } } } } } # Hitta alla spår och kopiera dessa till destinationen: Get-Tracks $Source | %{ Copy-Track ` $Destination ` $_.source ` $_.bokstav ` $_.artist ` $_.album ` $_.track }

Uppdaterat script

Nu antar det att alla album-mappar har namn av formatet årtal - album [artist] (t.ex. "1978 - Special Delivery [.38 Special]"). Se om scriptet kommer förbi filtret på det sättet.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Nä, samma resultat. Hur är det med blanktecken och annat, måste man veta exakt hur dessa ligger?
För det ligger (ett) blanktecken på båda sidor om "-" och även före hakparantesen "[".

Permalänk
Legendarisk

@zoombo: Om man ska kunna filtrera ut albumets namn ur mappen så måste man veta exakt hur formatet ser ut, men mönstret är skrivet för valfria mellanslag. Har dock för lite information för att kunna hjälpa till mycket mer, vet inte hur långt scriptet kör nu, eller hur din riktiga mappstruktur ser ut. Försök att deubgga lite, skriv ut testvärden, följ vad som händer och försök att identiera det specifika problemet. Är det något särskilt i koden du undrar över så fråga, finns säkert flera som kan hjälpa till.

Det lättaste kanske är om du bara arbetar bort albumfiltret, beror på om du har någon nytta av att få med det namnet eller ej. Tog med det i ett försök att göra det lättare för dig att formatera namen som du behöver, men kanske uppnådde motsatsen istället...

Testmappen jag använder ser ut så här:

└───A └───.38 Special ├───1978 - Special Delivery [.38 Special] │ 01 - I'm a Fool for You.mp3 │ 02 - Turnin' to You.mp3 │ 03 - Travelin' Man.mp3 │ cover.jpg │ playlist.m3u │ ├───1979 - Rockin' into the Night [.38 Special] │ 01 - Rockin' into the Night.mp3 │ 02 - Stone Cold Believer.mp3 │ 03 - Take Me Through the Night.mp3 │ cover.jpg │ playlist.m3u │ └───1981 - Wild-Eyed Southern Boys [.38 Special] 01 - Hold On Loosely.mp3 02 - First Time Around.mp3 03 - Wild-Eyed Southern Boys.mp3 cover.jpg playlist.m3u

Resultatet ser ut så här:

└───A └───.38 Special Rockin' into the Night - 01 - Rockin' into the Night.mp3 Rockin' into the Night - 02 - Stone Cold Believer.mp3 Rockin' into the Night - 03 - Take Me Through the Night.mp3 Special Delivery - 01 - I'm a Fool for You.mp3 Special Delivery - 02 - Turnin' to You.mp3 Special Delivery - 03 - Travelin' Man.mp3 Wild-Eyed Southern Boys - 01 - Hold On Loosely.mp3 Wild-Eyed Southern Boys - 02 - First Time Around.mp3 Wild-Eyed Southern Boys - 03 - Wild-Eyed Southern Boys.mp3

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Mycket märkligt. Exakt sådär ser min mappstuktur ut! Ja förutom att själva låtarna har formatet
01. Track1
02. Track2
osv. Men det bör knappast inverka.

Det vore smutt om din lösning funkade för det ger ett trevligt mervärde.
Kan det vara så att inlästa variabler inte töms när man kör scriptet på nytt och då stökar till det?
Nu händer alltså ingenting mer än att destinationskatalogen skapas - tom. Inga mappar skapas heller och det gjorde dom ju ett tag. Fast jag har inte ändrat nåt där.

Är dålig på debuggning i ISE, har provat att göra en pipe till en textfil men den är också helt tom.
Vet att man kan sätta breakpoints men det kanske inte ger nåt.
Kan man inte bara göra en echo till skärmen så att man ser vad som görs? Möjligen lägga ut så att variablerna (och radnumret) är med?

Permalänk
Legendarisk
Skrivet av zoombo:

Mycket märkligt. Exakt sådär ser min mappstuktur ut! Ja förutom att själva låtarna har formatet
01. Track1
02. Track2
osv. Men det bör knappast inverka.

Det har ingen effekt på exemplet, men det påverkar numreringen om det skulle uppstå dubletter av filnamn. Att ändra mönstret på rad 61 till "^(.+)\.([^.]+)$" (namets början (^), ett eller flera tecken (.+), en punkt (\.), en eller flera icke-punkter ([^.]+), namnets slut ($)) åtgärdar det, men det är alltså inte vad som krånglar nu.

Skrivet av zoombo:

Kan det vara så att inlästa variabler inte töms när man kör scriptet på nytt och då stökar till det?

Alla variabler initialiseras varje körning.

Skrivet av zoombo:

Nu händer alltså ingenting mer än att destinationskatalogen skapas - tom. Inga mappar skapas heller och det gjorde dom ju ett tag. Fast jag har inte ändrat nåt där.

Då vet du att du av någon anledning inte längre når rad 52. Kör du scriptet mot rätt mapp? Har du kontrollerat vad som händer innan den funktionen anropas? Prova att skriva ut $bokstav, $artist etc. i funktionen Get-Tracks för att se om den hittar några filer alls just nu, och om inte var den slutar.

Skrivet av zoombo:

Är dålig på debuggning i ISE, har provat att göra en pipe till en textfil men den är också helt tom.
Vet att man kan sätta breakpoints men det kanske inte ger nåt.

Om du sätter brytpunkter i ISE och kör scriptet så kommer den pausa exekveringen och t.ex. låta dig inspektera vad olika variabler innehåller innan du fortsätter. Här är ett exempel där jag satt brytpunkter på raderna 93, 96 och 99 och sedan kört scriptet. Du ser att den stannat på varje rad (man fortsätter med F5 eller Debug > Run / Continue), och på rad 99 skrev jag ut variablerna $bokstav, $artist och $album för att se vad de innehåller.

Det går utmärkt att debugga genom att bara skriva ut meddelanden på väl valda rader också, och det är säkert enklare om man inte redan är van vid sådana här verktyg.

Skrivet av zoombo:

Kan man inte bara göra en echo till skärmen så att man ser vad som görs? Möjligen lägga ut så att variablerna (och radnumret) är med?

Det är vad Write-Host gör. Om du inte ser något (och du har gett den en parameter att skriva ut) så körs antagligen inte raden. Backa upp och se vad som händer tidigare i scriptet, lägg till fler utskrifter och se var du börjar få resultat.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Jag får nästan samma output som dig när jag debuggar med samma breakpoints med flera undantag: variabeln $bokstav är artist, $album är tomt, $artist är album.
Den läser alltså inte rätt positioner.

Jag har inte min läsmapp direkt under rootmappen utan under en arbetsmapp som ligger en nivå in, kan det ha betydelse? Jag är säker på att jag anger rätt source och destination, har också kollat dessa variabler.

Permalänk
Legendarisk

@zoombo: Källan ska vara mappen som i sin tur innehåller dina bokstavsmappar. Det verkar ju ha fungerat med din E:\MP3 tidigare (antar att den innehåller A, B, C o.s.v.?), vad är skillnaden nu?

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

@Biberu: Nu funkar det!
Stället som startmappen ska ligga på måste vara ensam där, när jag flyttade allt till en ny mapp i rooten och startade därifrån rullade det igång!
Stort tack för hjälpen, ditt tålamod och även din ambition att lära ut. Jag bjuder på pilsner om våra vägar korsas!

Permalänk
Legendarisk

@zoombo: Härligt att det fungerar nu! Mycket nöje!

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Argh! Det här är fånigt så att det räcker! Glad i hågen petade jag in min nyladdade disk i bilen. Det såg bra ut, där fanns nu ca 17500 filer i 396 mappar.
Men...när jag började kolla närmare så hade jag inga fler mappar efter "Q". Varför det?
Jo! Filsystemet anser även att
<DIR> .
<DIR> ..
ska "räknas" som mappar vilket innebär att varje enskild mapp som inte är i rooten egentligen räknas som tre mappar! Det innebär att jag har 1192 mappar när max är 999 så i praktiken innebär detta att det egentligen inte finns stöd för mer än 333 mappar!

Känns heller inte som det finns någon enkel lösning på detta....

Permalänk
Legendarisk

@zoombo: Används artistmapparna av stereon, eller läser den ut vad den behöver ur ID3-taggarna? Om mapparna används så är väl det mest pragmatiska att plocka bort några av de artister du spelar mer sällan.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Biberu:

@zoombo: Används artistmapparna av stereon, eller läser den ut vad den behöver ur ID3-taggarna? Om mapparna används så är väl det mest pragmatiska att plocka bort några av de artister du spelar mer sällan.

Den verkar använda mapparna i första hand och taggarna i andra. Visst skulle man kunna göra så men hela idén med upplägget är just att kunna ha hela min musiksamling på en disk i bilen och med ditt script så verkade det ju gå att lösa.
Jag har hela min "skarpa" samling på ett NAS och sen kopierar jag ut därifrån, där lägger jag också in nytt materiel och synkar detta till några andra enheter med ett enkelt Robocopy-script. Att då sen köra ditt script innebär bara ytterligare en batchkörning och det kan jag leva med men att manuellt sitta och ta bort eller markera 2/3 av alla mappar varje gång det görs kändes inte som ett alternativ.

Det finns ju en tredje lösning men det kräver ett helt nytt script; ett som lyfter ner alla låtar ytterligare ett steg och placerar alla under samma bokstav (man tar alltså bort artistmappen). Detta kräver en räknare eftersom varje mapp inte får innehålla mer än 999 filer, så när man kommer upp till detta så krävs det alltså att det skapas en mapp till för resterande filer under samma bokstav. Och kanske ytterligare flera vid behov.