nopisoul
Goto Top

Dateien in einem Ordner Suchen, Umbenennen und Entpacken.

Hallo Leute,

Ich möchte Archive in einem Ordner suchen, deren Namen nach einem Bestimmten Schema ändern, und dann Danach in einen anderen Ordner enpacken. Habe aber absolut keine ahnung, wie ich das machen soll.

Also, mal schritt für schritt.

--> Umbenennen:
Die Archive haben alle unterscheidliche Namen, Unterschiedlich lang, und der Bereich, den ich Ändern möchte ist auch meist unterschiedlich lange, aber Klar definiert durch "[ ]".

Beispiele.:
Datei1: [Kurzername] Name.rar
Datei2: [Ich bin ein Langer Name] Habe auch noch nen Längeren Text hier.rar
Datei3: [Ich bin ein Nerfiger ( Name ) mit anderen -- Zeichen] Aber ansonsten Kurz.rar

Und möchte nun mal hierbei das in den Eckigen Klammern Weg haben.

--> Entpacken:
Ich nehme meist rar, kann aber auch gerene ein anderes Brogramm nutzen, dass rar archive entpacken kann.
Nun, das Entpacken soll von dem Ordner "C:\Downloads\Mangas\" in dem die Archive und der Batch ist, in ein anderen Ordner "F:\Mangas\<Datum>\<Archivname>\" entpackt werden.

Freue mich über Zahlreiche Hilfe.

Mfg NopiSoul

P.S.: Wenn das nicht über Batch geht, wie bekomm ich es dann gebacken? face-smile

_________________________________________________________________

Lösung:

$pathArchives = "D:\Users\Roman\Downloads\Manga"   
$pathExtract = "F:\Manga"   
$pathRAR = "C:\Program Files\WinRAR\Rar.exe"   
$pathZip = "C:\Program Files\7-Zip\7z.exe"  
dir $pathArchives -Filter "*.rar" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathRAR -ArgumentList "x ""$($_.FullName)"" * ""$newFolder""" -Wait -WindowStyle Hidden}  
dir $pathArchives -Filter "*.zip" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathZip -ArgumentList "x ""$($_.FullName)"" ""-o$newFolder""" -Wait -WindowStyle Hidden}  

Content-Key: 241607

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: colinardo
Lösung colinardo 23.06.2014, aktualisiert am 29.06.2014 um 19:58:14 Uhr
Goto Top
Hallo NopiSoul,
wenn dir Powershell nichts ausmacht, z.B. so (mit Verwendung des Kommandozeilenprogramms rar):
$pathArchives = "C:\Downloads\Mangas"  
$pathExtract = "F:\Mangas"  
$pathRAR = "C:\Program Files\WinRAR\Rar.exe"  
dir $pathArchives -Filter "*.rar" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathRAR -ArgumentList "e ""$($_.FullName)"" * ""$newFolder""" -Wait -WindowStyle Hidden}  
Grüße Uwe

p.s. mit Batch geht das auch, aber darauf hab ich grad kein Bock face-wink
Mitglied: NopiSoul
NopiSoul 24.06.2014 um 17:33:49 Uhr
Goto Top
So wie ich das verstanden habe, macht es nur die Sonderzeichen raus oder?

Ich wollte jedoch, dass es den Part der entfernt.

[Kurzername] Name.rar ---> Name.rar
Mitglied: colinardo
colinardo 24.06.2014 um 17:35:08 Uhr
Goto Top
Zitat von @NopiSoul:

So wie ich das verstanden habe, macht es nur die Sonderzeichen raus oder?
falsch verstanden, macht nur alles innerhalb und inklusive der weg
Mitglied: NopiSoul
NopiSoul 24.06.2014 um 17:39:59 Uhr
Goto Top
Dann bedanke ich mich mal, das ist genau was ich wollte, muss ich nur noch herausbekommen, wie ich das nun zum laufen bekomme, mit Powershell kenn ich mich nicht aus.
Mitglied: colinardo
Lösung colinardo 24.06.2014, aktualisiert am 29.06.2014 um 19:54:14 Uhr
Goto Top
Zitat von @NopiSoul:
mit Powershell kenn ich mich nicht aus.

back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speicherst man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script in der Konsole mit Eingabe des Pfades der Scriptdatei, oder mit einem Rechtsklick auf die Script-Datei :Mit Powershell ausführen gestartet werden.
Mitglied: NopiSoul
NopiSoul 24.06.2014, aktualisiert am 25.06.2014 um 15:21:46 Uhr
Goto Top
Und nochmals ein Großes Dankeschön :D
Mitglied: NopiSoul
NopiSoul 25.06.2014 um 15:21:36 Uhr
Goto Top
Leider Funktioniert es noch nicht, es Startet, und schließt gleich wieder, sonnst passiert nix.
Mitglied: colinardo
colinardo 25.06.2014 aktualisiert um 15:31:40 Uhr
Goto Top
das sind die typischen Powershell-Anfängerfehler. Öffne eine Powershell-Konsole und überprüfe dort nochmal mit Get-ExecutionPolicy ob die Policy tatsächlich geändert wurde ... Wenn nicht nochmal Set-ExecutionPolicy RemoteSigned eingeben und dann das Script mit Eingabe des kompletten Pfades ausführen.
Pfade hast du hoffentlich im Script entsprechend angepasst. Geht hier ansonsten einwandfrei !
Mitglied: NopiSoul
NopiSoul 25.06.2014 um 20:28:18 Uhr
Goto Top
Nachdem ich ihn im Schellfenster nach dem Prüfen, mit Kompletten Pfad gestartet habe, kommt nur eine Zeile, dass er es startet, nichts passiert sonnst.
Mitglied: colinardo
colinardo 25.06.2014 aktualisiert um 21:34:05 Uhr
Goto Top
das Script gibt keine Ausgabe aus, das läuft im Hintergrund ab. Vermutlich hast du den Pfaden einen Backslash am Ende hinzugefügt, das darfst du hier nicht machen!
Bei meinen Tests habe ich die Original Konsolenversion des Programms WinRAR benutzt, die Syntax gilt hier also fûr diese Version!
Läuft hier wie gesagt einwandfrei, ich mach das ja nicht zum ersten mal wie du meinem Profil entnehmen kannst - irgendwas machst du hier sonst noch falsch...oder du hast eine vollkommen veraltete PS-Version, OS ?
Mitglied: NopiSoul
NopiSoul 29.06.2014 aktualisiert um 18:16:41 Uhr
Goto Top
Ich habe das Problem nun entdeckt. Nachdem ich erkannt habe, dass die Archive .zip-Files waren, und ich die bearbeitung nochmal mit einem *.zip machen lies, hatt es dann gearbeitet, jedoch kam nur eine/mehrere Fehlermeldungen.

Rename-Item : Es wurde kein Parameter gefunden, der dem Parameternamen "LiteralPath" entspricht.  
Bei D:\Users\User\Downloads\Manga\Entpacken.ps1:7 Zeichen:63
+ dir $pathArchives -Filter "*.zip" | %{rename-item -LiteralPath <<<<  $_.Fullname -NewName "$($_.Name -replace '\[.*?\]','')" -Force -PassThru} | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; i  
f(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathRAR -ArgumentList "e ""$($_.FullName)"" * ""$newFolder""" -Wait -WindowStyle Hidden}  
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand
Mitglied: colinardo
Lösung colinardo 29.06.2014 aktualisiert um 19:18:20 Uhr
Goto Top
Powershell auf mind. Version 3.0 Updaten !! oder oben angepasste Version die jetzt auch mit PS2.0 funktioniert, benutzen ...
Mitglied: NopiSoul
NopiSoul 29.06.2014 um 19:18:13 Uhr
Goto Top
Ok, es Leuft jetzt soweit, dass es die Ordner erstellt, aber entpackt wurde nichts.
Mitglied: colinardo
colinardo 29.06.2014 aktualisiert um 19:27:31 Uhr
Goto Top
Was für eine rar.exe verwendest du, Pfad zu dieser korrekt angepasst? Ich habe oben geschrieben das die Syntax für die originale RAR-Konsolenversion von WinRAR angepasst ist !
Bei dieser sieht die Syntax zum extrahieren wie folgt aus:
rar.exe e "[PFAD ZUR RAR-DATEI]" * "[ZIELORDNER]"
Und damit läuft es hier einwandfrei!
Mitglied: NopiSoul
NopiSoul 29.06.2014 um 19:28:02 Uhr
Goto Top
Ich habe keine Gekaufte WinRar Version, sondern nutze eine Testversion, kann es daran liegen?
Mitglied: colinardo
colinardo 29.06.2014 um 19:29:09 Uhr
Goto Top
Zitat von @NopiSoul:
Ich habe keine Gekaufte WinRar Version, sondern nutze eine Testversion, kann es daran liegen?
ja
Mitglied: NopiSoul
NopiSoul 29.06.2014 um 19:50:02 Uhr
Goto Top
Auch der kauf der WinRar Version hat nichst daran geändert, dass es nicht entpackt wird. Ordner werden erstellt, aber nicht gefüllt. Umbenennen erfolgt auch, (auch wenn das " " am anfang etwas unschön ist).
Mitglied: colinardo
colinardo 29.06.2014 aktualisiert um 19:58:48 Uhr
Goto Top
Sorry aber hier läuft es einwandfrei, du musst noch irgendwo einen Fehler machen ... oder deine RAR-Dateien sind keine RARs
(auch wenn das " " am anfang etwas unschön ist).
kein Problem ist oben angepasst.
Mitglied: NopiSoul
NopiSoul 29.06.2014 aktualisiert um 20:31:40 Uhr
Goto Top
Ja, habe jetzt festgestellt, das sehr offt dazwischen zips sind. und bei denen Tritt der mangel an dateien auf.
Andererseits gebe ich ihm mit
dir $pathArchives -Filter "*.zip" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathRAR -ArgumentList "e ""$($_.FullName)"" * ""$newFolder""" -Wait -WindowStyle Hidden}  

ja die Zips über, und er sollte sie genauso behandeln.
Mitglied: NopiSoul
NopiSoul 30.06.2014 aktualisiert um 22:35:16 Uhr
Goto Top
Mit Etwas herumexperimentieren habe ich nun eine Lösung gefunden.

$pathArchives = "D:\Users\Roman\Downloads\Manga"   
$pathExtract = "F:\Manga"   
$pathRAR = "C:\Program Files\WinRAR\Rar.exe"   
$pathZip = "C:\Program Files\7-Zip\7z.exe"  
dir $pathArchives -Filter "*.rar" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathRAR -ArgumentList "x ""$($_.FullName)"" * ""$newFolder""" -Wait -WindowStyle Hidden}  
dir $pathArchives -Filter "*.zip" | rename-item -NewName {($_.Name -replace '\[.*?\]','').Trim()} -Force -PassThru | %{$newFolder = $pathExtract+"\"+(get-date -Format 'dd.MM.yyyy')+"\"+$_.Basename+"\"; if(!(Test-Path $newFolder)){md $newFolder -Force}; start-process $pathZip -ArgumentList "x ""$($_.FullName)"" ""-o$newFolder""" -Wait -WindowStyle Hidden}  


Für alle dies Brauchen, Verwendbar.

Grüße, und Gelöst.