Powershell-Script zum automatischen packen (Hauptsächlich für serienjunkies)

    • Powershell-Script zum automatischen packen (Hauptsächlich für serienjunkies)

      [b]edit: siehe letzter Post: NICHT mehr für UL auf Main verwenden![/b]

      Da ich von Natur aus ein fauler Mensch bin habe ich mir heute einmal die Zeit genommen den doch recht Zeitaufwändigen Prozess des packens zu automatisieren.

      Das folgende Script packt jede *.mkv-Datei in einem gegebenen Verzeichnis nach einem festgelegten Schema und speichert diese in einem anderen ihm gegebenen Verzeichnis.
      Es kann eingestellt werden ob das Verzeichnis rekursiv durchforstet werden soll oder nicht.
      Es werden Archivnamen aus dem Originalen Dateinamen generiert und es wird zwischen 720p.Web/1080p.Web/720p/1080p sowie dem fehlen einer solchen Stufe unterschieden.

      Es muss angemerkt werden, dass die Zielarchivgröße ca. 1,5 MB höher ist als das was man angegeben hat. Dies habe ich so geschrieben, da die Upload-Prämien meist eine Mindestgröße voraussetzen, damit niemandem der diese Script nutzt Prämien aufgrund ein paar fehlender Bytes je Datei verloren gehen.

      Ich muss dazu sagen, dass ich beruflich hautpsächlich SQL-Code schreibe und mit der Powershell und RegEx recht wenig zu tun habe. Daher ist das Script eher auf Funktionalität als auf effektivität ausgerichtet.
      Der Packvorgang an und für sich ist langsamer, aber das holt man durch die gesparte Tipp und einstellungszeit mehr als wieder raus.


      Falls ihr das Script einfach nur nutzen wollt sind folgende Schritte zu befolgen:
      1. Öffnet einen Texteditor
      2. Kopiert den unten stehenden Code und fügt ihn im Texteditor ein
      3. Ändert die Parameter im ersten Block nach euren Bedürfnissen
      3. Speichert die datei mit der Endung .ps1
      4. Öffnet die Powershell
      5. Falls ihr auf dem Computer noch nie ein PS-Script ausgeführt habt folgenden Befehl ausführen und bestätigen: Set-ExecutionPolicy Unrestricted
      6. Script ausführen und warten

      Hinweis: Ich empfehle das Scriptnicht per Doppelklick auszuführen, da sich dann das Fenster nach getaner Arbeit automatisch wieder schließt (und eventuelle Fehler nicht lesbar sind).

      Bekannte Einschränkungen:
      Serienname muss mindestens 3 Zeichen vor der ersten Zahl betragen.
      Datei muss S gefolgt von 1-3 Zahlen, gefolgt von E und genau 2 Zahlen enthalten

      So, ich hoffe das geschriebene ergibt Sinn.
      Würde mich freuen wenn ich Feedback bekäme, wenn ich es auch hauptsächlich für mcih selbst geschrieben habe. 8o

      Script:

      Display Spoiler

      Brainfuck Source Code

      1. #---------------------------------------------------
      2. # Benutzerangaben
      3. #---------------------------------------------------
      4. $SOURCE="F:" # Hier das Verzeichnis angeben, in welchem die zu packenden Dateien liegen
      5. $DESTINATION="F:\upload" # Hier das Zielverzeichnis für die gepackten Dateien angeben
      6. $RAR_EXE="F:\rar\rar.exe" # Hier den vollqualifizierten Dateinamen der rar.exe angeben (z.B.: C:\Programme\Winrar\rar.exe)
      7. $recurse=1 #1= Unterverzeichnisse werden geprüft - 2= Unterverzeichnisse werden ignoriert
      8. $sizemodifier="M" #Hier die Maßeinheit für die Archivgröße angeben: M=MB G=GB K=KB B=Byte T=TB
      9. [Int64]$size=100 #Hier die Größe der Archive angeben
      10. #------------------------------------------
      11. #Beginn der Ausführung
      12. #
      13. #------------------------------------------
      14. switch ($sizemodifier){
      15. "K" { $size*=1024 }
      16. "M"{ $size*=(1024*1024)}
      17. "G"{ $size*=(1024*1024*1024)}
      18. "T"{ $size*=(1024*1024*1024*1024)}
      19. }
      20. $size/=1000
      21. $size+=2000
      22. echo $size
      23. $regex1="^([A-Z]{1,3})[A-Z]*.?([A-Z]{1,3})[A-Z]*\S*(S\d{1,3}E\d{2}).?.*\S*(720p?|1080p*)\S*(web)\S*[.]mkv"
      24. $regex2="^([A-Z]{1,3})[A-Z]*.?([A-Z]{1,3})[A-Z]*\S*(S\d{1,3}E\d{2}).?.*\S*(720p?|1080p*)\S*[.]mkv"
      25. $regex3="^([A-Z]{1,3})[A-Z]*.?([A-Z]{1,3})[A-Z]*\S*(S\d{1,3}E\d{2}).?.*\S*[.]mkv"
      26. $ziel=""
      27. # Fragt die Dateien ab - rekursiv oder eben auch nicht
      28. if($recurse -eq 1){
      29. $files=gci -recurse ($SOURCE)
      30. }
      31. else{
      32. $files=gci ($SOURCE)
      33. }
      34. if( -not (Test-Path $DESTINATION) )
      35. {
      36. New-Item $DESTINATION -type directory
      37. }
      38. foreach($file in $files){
      39. if($file.Extension -like ".mkv"){
      40. #echo $file.name
      41. $ziel=$file.name
      42. if($ziel -match $regex1){
      43. $ziel=$ziel -replace $regex1,'$1$2.$3.$4.$5.rar'
      44. }
      45. else {
      46. if($ziel -match $regex2){
      47. $ziel=$ziel -replace $regex2,'$1$2.$3.$4.rar'
      48. }
      49. else{
      50. $ziel=$ziel -replace $regex3,'$1$2.$3.rar'
      51. }
      52. }
      53. $ziel=$DESTINATION + "" + $ziel
      54. #--------------------------------------------
      55. $Command=$RAR_EXE+" a -v"+$size+" '-hpserienjunkies.org' -m0 -r- -rr4 -mt20 '"+$ziel+"' '"+$file.fullname+"'"
      56. # echo $Command
      57. Invoke-Expression $Command # Packvorgang
      58. #----------------------------
      59. }
      60. }
      Display All

      The post was edited 2 times, last by player8472: Warnung vor Nutzung für Main-Upload in gegebener Form ().

    • Hey,
      Idee finde ich super, was ich persönlich allerdings noch um einiges besser finden würde, wäre wenn man das Skript in das Kontextmenü eintragen könnte, sodass man nicht jedes mal das Skript anpasst, eine PS aufmacht und dann das Skript ausführt.

      Ansonsten finde ich es sehr gut, dass du ein solches Skript mit uns teilst.

      Gruß
    • Kontextmenüs haben die Eigenart, dass sich Leute verklicken...

      Der Gedanke ist: Man richtet sich ein verzeichnis ein wo grundsätzlich die quellen reinkommen, konfigueriert das Script einmal und dann braucht man es nur noch zu starten wenn was neues kommt (und spart sich das nachschauen, wie man die Dateien beim letzten Upload genannt hat).

      Nächste Ausbaustufe soll dann auch den Upload per ftp übernehmen.
      Als nächstes kommt ein Protokoll für zu ignorierende (zuvor bereits gepackte) Releases hinzu mit Schalter für automatisches Löschen.
      Der Endausbau liest zusätzlich die Links vom Hoster ein und speichert sie und die Dateinamen (ohne Endung) in eine txt, so dass man nur noch Copy und Paste in das sj-Upload-Formular machen muss.

      Ziel soll es sein, dass (zumindest ich) meine neuen Episoden innerhalb 1-2 Stunden nach Release zumindest auf dem Hoster habe.

      Mein Download ist vollautomatisiert ,bei mir wird dieses Script im Endausbau regelmäßig laufen, so dass ich meinen ReleaseKalender wegschmeissen kann^^

      So viel zum Pkan. Da ich allerdings noch andere berufliche und private Projekte habe wird die Entwicklung eher schleppend voran gehen.

      Sollte jemand (sinnvolle) Verbesserungen haben kann er mir seine modifizierte Version gerne schicken, ich prüfe diese und Übernehme sie dann ggf. (Zwingend erforderlich ist allerdings, dass das Script vollautomatisch ohne jegliche Interaktion laufen kann.)

      Auch wenn es auf diesem Board eigentlich eher nen Scherz ist: Ich bitte ich mein geistiges Eigentum zu achten. Ihr dürft es für euch selbst gerne anpassen und nutzen - Ich bitte jedoch darum es nicht per Copy&Paste auf andere Boards/Sites zu übertragen.
      Außerdem darf das Script nicht für kommerzielle Zwecke eingesetzt werden (Prämien von Hostern ausgenommen)
    • Hatte den gesehen - Ist mir viel zu viel arbeit...
      Außerdem braucht man immer noch die GUI. Bei meinem Script stellst du einmal alles ein (das meiste ist von mir eh vorbereitet) und du brauchst dir nur noch die DL-Links beim Hoster abzuholen^^

      Habe den Upload mit einstellbaren Threads auch fertig.
      Da es zwei Dateien sind gebe ich es auf Anfrage raus (die zweite muss einfach ins gleiche Verzeichnis)

      Allerdings erst ab morgen abend, da ich grad keinen bock mehr hab die unnötigen debug-Ausgaben zu löschen und meine zugangsdaten zu entfernen^^

      P.S.: Ich wäre dankbar wenn jemand mein RegEx-Konstrukt verbessern könnte - Das ist noch ne Katastrophe^^

      The post was edited 1 time, last by player8472 ().

    • In dieser Form bitte NICHT mehr für den Upload auf die Main verwenden!

      Ihr würdet gegen B1b verstoßen! Das Script fügt 4% Wiederherstellungsinformationen hinzu!

      Eine aktualisierte Version des Skripts (auch ein wenig erweitert) stelle ich bei Anfrage per PM gerne zur Verfügung.