saranadimicarus
Goto Top

MP3 Sortieralgorithmus

Hallo Community,

ich versuche mir per Power-Shell einen einfachen Sortieralgorithmus für meine MP3 Downloads zu erstellen. (Falls die Frage aufkommt... Nein es sind keine Raubkopien... ich nehme mir mit spezieller Software Lieder, die über Webradios gespielt werden, legal auf.) Da ich eine extrem gute Verbindung habe können dies innerhalb eines Arbeitstages schon 5-10k Mp3´s sein. Jetzt wollte ich mir ein Programm schreiben das 2 Textdateien abarbeiten soll und die Einträge in der "OK" Liste in einen neuen Ordner verschieben und die Einträge in der "NichtOK" Liste einfach löschen. Mein Programm funktioniert jetzt bereits soweit, das es mir die Bands aus der OK liste in einen Ordner verschiebt.

Ich habe mal mein "Programm" unten angefügt und konkret handelt es sich um die Teile mit "=>". Hier will ich, dass ein Ordner mit dem namen der Band angelegt wird. (also im Ordner TEST existiert dann ein Ordner z.B.: "Black Sabbath"). Nur finde ich im Internet irgendwie gerade nicht, wie ich den Befehl MD mit einer Variablen kombinieren soll %$Band% oder %band% funktionieren irgendwie auch nicht face-sad
Ach ja bitte ned allzuarg lachen face-smile das ist mein erstes Programmierprojekt face-smile

Hier nun das Progrämmchen...

$array =Get-content d:\Projekt\OKListe.txt
$counter = 0
$newDirectory = 0
$mp3="*.mp3"

do{

$newDirectory = $array[$counter]
$newDirectory = $newDirectory.replace("*"," ")
$newDirectory = $newDirectory.replace("?"," ")
$Band =$array[$counter]+$mp3


if ((Test-Path F:\test) -ne $True)
{
new-item F:\test -ItemType directory
}

=> move-item -path d:\projekt\$Band -destination F:\test
=> md f:\test\$Band
$counter++

}
while ($counter -le $array.count-1)

Content-Key: 240978

Url: https://administrator.de/contentid/240978

Printed on: April 20, 2024 at 15:04 o'clock

Member: SaranaDimicarus
SaranaDimicarus Jun 16, 2014 at 09:59:43 (UTC)
Goto Top
hallöchen...

ich wusste wenn ich hier poste hab ich es n paar minuten später selbst rausgefunden -.-

also für denjenigen den es interessiert... ich habs jetzt so gelöst...

new-item -path F:\Test\ -name $Band -type directory

ich würde gerne aber das Thema nicht nicht als gelöst einstellen, da mich trotzdem eure Kommentare/verbesserungen an meinem Code interessieren. Ich komme morgen dann wieder und schließe den Thread face-smile

danke nochmals fürs lesen :D
Member: Xaero1982
Xaero1982 Jun 16, 2014 at 11:23:49 (UTC)
Goto Top
Hi,

gibt es nur, wenn du Code-Tags benutzt. <"code"> und <"/code"> ohne "" -> oben auf Bearbeiten klicken und bitte anpassen.

Gruß
Member: colinardo
colinardo Jun 17, 2014 updated at 10:01:00 (UTC)
Goto Top
Moin Sarana, Willkommen auf Administrator.de!
Ach ja bitte ned allzuarg lachen face-smile das ist mein erstes Programmierprojekt face-smile
Machen wir nicht, ließe sich aber auf eine Zeile reduzieren (wenn ich deinen Code richtig interpretiert habe):
gc "d:\Projekt\OKListe.txt" | %{$bandDIR = "F:\Test\$_"; if(!(Test-Path $bandDIR )){md $bandDIR -Force}; move-item "D:\projekt\$_*.mp3" $bandDIR -Force}  
Viel Spaß bei entziffern face-wink

p.s. die Variable $newDirectory verwendest du nirgendwo ... ?

Grüße Uwe
Member: colinardo
colinardo Jun 17, 2014 updated at 09:58:31 (UTC)
Goto Top
[OT]
Hi Xaero,
Zitat von @Xaero1982:
gibt es nur, wenn du Code-Tags benutzt. <"code"> und <"/code"> ohne "" -> oben auf
Bearbeiten klicken und bitte anpassen.
ein kleiner Tipp nebenbei face-smile: Du kannst die Code-Tags hier im Text auch richtig ausschreiben:

<code> Quelltext </code>

dazu schreibst du diese mit einem Dummy folgendermaßen:

515d99895e469e63a5671527848b3fd7

[/OT]

Grüße Uwe
Member: SaranaDimicarus
SaranaDimicarus Jun 18, 2014 at 05:09:21 (UTC)
Goto Top
So danke erstmal für die vielen Antworten face-smile bin leider gestern nicht mehr zu einer Antwort gekommen face-sad

das mit dem gekürzten Code probier ich dann gleich mal aus und auch das mit den Tags face-smile meine Vorgehensweise war halt folgende... ich hab mir überlegt was gemacht werden soll und dann hab ich solange gegoogelt und ausprobiert bis das codeschnipsel das getan hat was ich will... und dann hab ich es in mein "Programm eingebaut". Daher kommt es auch das die Variable $NewDirectory noch nirgens benutzt worden ist face-smile

na ich probier alles mal aus und geb dann nochmal bescheid obs geklappt hat face-smile

danke nochmals und ich wünsche euch einen schönen Tag.

Sandra
Member: SaranaDimicarus
SaranaDimicarus Jun 23, 2014 at 07:56:02 (UTC)
Goto Top
Sooo jetzt habe ich an meiner Lösung weitergebastelt... Bei mir dauert das halt immer ein bischen, da ich 2 Kinder habe die einfach vorgehen face-smile (4Jahre und der andere 5 Monate)

Der Einzeiler hat leider nicht so funktioniert wie er sollte... bei einem Datensatz in der OKListe hat er keine mucken gemacht... sobald aber mehr Datensätze drinnen waren hat er die Verzeichnisse angelegt, jedoch alle Mp3´s die im Ausgangsverzeichnis drinnen waren kopiert ohne eine auswahl zu treffen. Aber hat mir doch n paar nette Hilfestellungen zu meinem Code gebracht face-smile

der sieht inzwischen so aus:

#Globale Variablen
#============================================================================================
$array =Get-content d:\Projekt\OKListe.txt
$zielDIR = "F:\test"
$startDIR = "D:\projekt"
$counter = 0
$newDirectory = 0
$mp3=".mp3"


do{

#Hier wird der Bandname aus dem Array ohne * und ? (die für das kopieren später wichtig sind)
#dargestellt. Aus Black?Sabbath* wird Black Sabbath
#Originalbezeichung der z.B.: Alice Cooper - Poison 1989.mp3
#Problem... ähnliche Bandnamen z.B.: ACDC, AC/DC, AC DC, AC_DC => ? und *
#============================================================================================
$newDirectory = $array[$counter]
$newDirectory = $newDirectory.replace("*"," ")
$newDirectory = $newDirectory.replace("?"," ")
$newDirectory = "$zielDIR\$newDirectory"

#komplette MP3 Bezeichung mit .mp3
#============================================================================================
$band ="$array[$counter]+$mp3"
write-output "Ausgabe Variable Band: $band"
Write-Output "Counter $Counter"

#Hier werden die Bandspezifischen Ordner festgelegt
#============================================================================================
  1. F:\Test\Black Sabbath
$zielDIRBand = "$zielDIR\$newDirectory"
#PASST! write-output "Ausgabe variable zielDIRBand: $zielDIRBand"
  1. D.\projekt\black?Sabbath*.mp3
$zielITEMS = "$startDIR\$Band"
write-output "Ausgabe variable zielITEMS: $zielITEMS"

#Hier wird überprüft, ob es schon einen Ordner gibt. Wenn nicht wird er angelegt
#============================================================================================
if (!(Test-Path $zielDIRBand))
{
md $newDirectory -Force
}

#Hier werden die MP3 der speziefischen Band in den Bandordner verschoben/kopiert.
#============================================================================================
copy-item $zielITEMS $zielDIRBand
$counter++

}
while ($counter -le $array.count-1)


***

Das funktioniert inzwischen ganz gut... habe ich aber mehrere verschiedene Dateien in meiner OKListe klappt der zugriff auf das Array nicht mehr... Daraufhin hab ich versucht die Ausgaben meiner Variablen mittels "write-output" auszulesen. (daher auch meine Meinung das nur da Array probleme macht). Ich füge es jetzt noch mit an und bin mir sicher, das ihr mir da helfen könnt :D

Ach eine frage noch... wie kann ich denn in meinem "programm" ein anderes Programm aufrufen? (nur so aus interesse)

So nun hier die Ausgaben meiner Variablen

Mode LastWriteTime Length Name
------------- ------ ----
d---- 20.06.2014 10:49 Masters Of Metal ,
Ausgabe Variable Band: Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[1]+.mp3
Counter 1
Ausgabe variable zielITEMS: D:\projekt\Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[1]+.mp3
d---- 20.06.2014 10:49 Platzhalter ,
Ausgabe Variable Band: Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[2]+.mp3
Counter 2
Ausgabe variable zielITEMS: D:\projekt\Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[2]+.mp3
d---- 20.06.2014 10:49 Accept ,
Ausgabe Variable Band: Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[3]+.mp3
Counter 3
Ausgabe variable zielITEMS: D:\projekt\Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[3]+.mp3
d---- 20.06.2014 10:49 Alice Cooper ,
Ausgabe Variable Band: Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[4]+.mp3
Counter 4
Ausgabe variable zielITEMS: D:\projekt\Masters?Of?Metal*, Platzhalter*, Accept*, Alice?Cooper*, Black?Sabbath*,[4]+.mp3
d---- 20.06.2014 10:49 Black Sabbath ,
Member: colinardo
colinardo Jun 23, 2014 updated at 08:37:00 (UTC)
Goto Top
naja ohne das wir genauere Spezifikationen bzw. Beispiele aus deinem Textfile bzw. deines Vorhabens haben, schwer deine Ansprüche exakt umzusetzen.
Und bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>, ansonsten kommen uns hier eventuell wichtige Sonderzeichen abhanden, hatten wir aber oben schon zwei mal erwähnt!
Ach eine frage noch... wie kann ich denn in meinem "programm" ein anderes Programm aufrufen? (nur so aus interesse)
http://social.technet.microsoft.com/wiki/contents/articles/7703.powersh ...
"C:\deinprogramm.exe"
start-process "C:\Deinprogramm.exe"
und schau dir bitte mal das foreach() Konstrukt an dann brauchst du das Gebastel mit dem do while und dem counter nicht:
foreach($line in $array){
  ...
}
Bitte konsultiere zuerst diese Referenzen, für einen Grundkurs in Powershell ist das Forum eigentlich zu schade ... ich fahr ja auch kein Auto ohne Führerschein face-wink
Powershell Grundlagen- und Praxisvermittlung:

Viel Erfolg
Grüße Uwe
Member: SaranaDimicarus
SaranaDimicarus Jun 23, 2014 at 12:17:46 (UTC)
Goto Top
ah sorry das mit dem hab das völlig vergessen -.- mea culpa...

ich verlange hier ja keinen Grundkurs in Powershell... ich habe mir das Programm ja unter hilfenahme von Internetquellen soweit hingebogen... es läuft ja soweit nur das es dieses Problem mit dem Array gibt...

und klar ohne führerschein fahr ich nicht auto... aber ich hoffe du setzt dein kind nicht in das auto und sagst... üb du mal selber.. hier ist die Betriebsanleitung vom auto :D sondern schickst ihn in die Fahrschule wo ihm geholfen wird :D und den Fahrschullehrer darf man dann bestimmt auch was fragen :P

ich mach das halt immer so wies im Internet steht und wenns nicht klappt probier ich andere sachen aus... und wenn die nicht klappen frage ich hier nach...dachte das wäre soweit ok...

und wie die MP3 Benennungen aussehen hab ich ja auch in die # Eingetragen... das mit dem Txt-File ist evtl etwas schwer zu verstehen aber da steht nix anderes drinnen wie

Alice?Cooper*
AC?DC*
Accept*
usw...

wenn ihr der meinung seit das gehört nicht ins forum dann ist das auch ok... dann entschuldige ich mich, das euch mit meinen profanen Frauenproblemen belästigt habe face-smile
Member: SaranaDimicarus
SaranaDimicarus Jul 02, 2014 at 08:47:06 (UTC)
Goto Top
Hallo ihr alle,

das Programm funktioniert... face-smile habs hinbekommen... :D
danke nochmals für alle eure Tipps... werd mich dann evtl darum kümmern den Quallcode zu optimieren und vielleicht auch die DO-While schleife gegen das foreach ersetzen... für die, die es auch interessiert... hier der funktionierende (zugegebenermaßen nicht so optimierte) Quellcode face-smile

#Globale Variablen
#============================================================================================
$array =Get-content d:\Projekt\OKListe.txt
$zielDIR = "F:\test"
$startDIR = "D:\projekt"
$counter = 0
$newDirectory = 0
$mp3="mp3"

write-output "Arrayinhalt: $array"
write-output "Anzahl der Elemente im Array:"
$array.count

do{

#Hier wird der Bandname aus dem Array ohne * und ? (die für das kopieren später wichtig sind)
#dargestellt. Aus Black?Sabbath* wird Black Sabbath
#Originalbezeichung der z.B.: Alice Cooper - Poison 1989.mp3
#Problem... ähnliche Bandnamen z.B.: ACDC, AC/DC, AC DC, AC_DC => ? und *
#============================================================================================
$newDirectory = $array[$counter]
$newDirectory = $newDirectory.replace("*"," ")
$newDirectory = $newDirectory.replace("?"," ")
$newDirectory = "$zielDIR\$newDirectory"

#komplette MP3 Bezeichung mit .mp3
#============================================================================================
#Variable Band hat das Endformat )=> Accept*.mp3
$band = $array[$counter]
$band = "$band.$mp3"
write-output "Ausgabe Variable Band: $band"
Write-Output "Counter $Counter"

#Hier werden die Bandspezifischen Ordner festgelegt
#============================================================================================
  1. F:\Test\Black Sabbath
$zielDIRBand = "$newDirectory"
write-output "Ausgabe variable zielDIRBand: $zielDIRBand"
  1. D.\projekt\black?Sabbath*.mp3
$zielITEMS = "$startDIR\$Band"
write-output "Ausgabe variable zielITEMS: $zielITEMS"

#Hier wird überprüft, ob es schon einen Ordner gibt. Wenn nicht wird er angelegt
#============================================================================================
if (!(Test-Path $zielDIRBand))
{
md $newDirectory -Force
}

#Hier werden die MP3 der speziefischen Band in den Bandordner verschoben/kopiert.
#============================================================================================
copy-item $zielITEMS $zielDIRBand
$counter++

}
while ($counter -le $array.count-1)

danke euch allen nochmal..