Hi an Alle
ich hab da mal ne Frage weil ich gerade meine Serien Ordner aufräumen möchte.
Meine Verzeichnis Struktur sieht momentan so aus:
Serienname Serie1 - Staffel 1
Serienname Serie1 - Staffel 2
Serienname Serie1 - Staffel 3
Serienname Serie1 - Staffel 4
Serienname Serie2 - Staffel 1
Serienname Serie2 - Staffel 2
Serienname Serie2 - Staffel 3
Serienname Serie2 - Staffel 4
usw
Ich hätte gerne die Verzeichnisse mit Staffel 2 bis 4 (oder auch mehr) immer in das Staffel 1 Verzeichnis Verschoben.
Gibt es dazu irgendwie ne Möglichkeit? Ich will nicht alle von Hand verschieben und ein Befehl der alle aufenmal verschiebt wäre dazu einfach Super.
Soll also dann so ausehen:
Serienname Serie1 - Staffel 1
-Serienname Serie1 - Staffel 2
-Serienname Serie1 - Staffel 3
-Serienname Serie1 - Staffel 4
Serienname Serie2 - Staffel 1
-Serienname Serie2 - Staffel 2
-Serienname Serie2 - Staffel 3
-Serienname Serie2 - Staffel 4
usw
Film Serien/Staffel Verzeichnisse verschieben, aufräumen
Moderators: Hacker, Stefan2, white
PowerShell: Move same-name Folder to Main folder
Hallo und willkommen, maggot881!
Probiers mal mit PowerShell.
- Backup deiner Daten erstellen
- PowerShell starten
- in deinen "Serien Ordner" wechseln
- folgendes eingeben (reinkopieren). Am Besten erstmal nur mit ein paar Serien ausprobieren.
Nur für Serien mit bis zu 9 Staffeln.
Staffel 1
...
Staffel 9
TEST:
Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){ "MOVE $_ TO $Fld" }}
WORKING COMMAND:
Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){MOVE $_ $Fld}}
(Die Kommandos bestehen jeweils aus EINER langen Zeile. (die neuste forumsdesignänderung ist nicht gut für lange codezeilen))
[face=timesnewroman]Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){MOVE $_ $Fld}}[/face]
- - -
Schritt-für-Schritt Erklärung:
VON:
..\Serienname Serie1 - Staffel 1
..\Serienname Serie1 - Staffel 2
..\Serienname Serie1 - Staffel 3
..\Serienname Serie1 - Staffel 4
ZU:
..\Serienname Serie1 - Staffel 1
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 2
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 3
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 4
Getestet mit PowerShell v2.0
HTH? Ohne Gelinggarantie.
.
Probiers mal mit PowerShell.
- Backup deiner Daten erstellen
- PowerShell starten
- in deinen "Serien Ordner" wechseln
- folgendes eingeben (reinkopieren). Am Besten erstmal nur mit ein paar Serien ausprobieren.
Nur für Serien mit bis zu 9 Staffeln.
Staffel 1
...
Staffel 9
TEST:
Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){ "MOVE $_ TO $Fld" }}
WORKING COMMAND:
Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){MOVE $_ $Fld}}
(Die Kommandos bestehen jeweils aus EINER langen Zeile. (die neuste forumsdesignänderung ist nicht gut für lange codezeilen))
[face=timesnewroman]Dir|Where{$_.PSIsContainer}|ForEach{$SN=$_.Name.substring($_.Name.Length -1,1);$Fld=$_.Name.Substring(0,$_.Name.Length-1)+'1';If($SN -ne 1){MOVE $_ $Fld}}[/face]
- - -
Schritt-für-Schritt Erklärung:
Code: Select all
Get-ChildItem|
Where{$_.PSIsContainer}| #Nur Ordner
ForEach{ #Für jeden Ordner....
# letzte Ziffer als $StaffelNummer:
#Serienname Serie1 - Staffel >1<
$StaffelNummer = $_.Name.substring($_.Name.Length -1,1);
#Ordnername ohne letzte Ziffer plus die '1' für den Hauptordner:
#>Serienname Serie1 - Staffel< + >1<
$StaffelBaseFld = $_.Name.Substring(0,$_.Name.Length-1)+'1';
# Wenn StaffelNummer <> 1, Dann verschiebe nach Ordner '1':
#Serienname Serie1 - Staffel 2 >>> #Serienname Serie1 - Staffel 1
if($StaffelNummer -ne 1){"move $_ to $StaffelBaseFld"}
}
..\Serienname Serie1 - Staffel 1
..\Serienname Serie1 - Staffel 2
..\Serienname Serie1 - Staffel 3
..\Serienname Serie1 - Staffel 4
ZU:
..\Serienname Serie1 - Staffel 1
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 2
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 3
..\Serienname Serie1 - Staffel 1\Serienname Serie1 - Staffel 4
Getestet mit PowerShell v2.0
HTH? Ohne Gelinggarantie.
.
- GammelBert
- Member
- Posts: 109
- Joined: 2007-02-21, 18:42 UTC
- Location: Germany
-
- Power Member
- Posts: 872
- Joined: 2013-09-04, 14:07 UTC
Was, es gibt immer noch Leute, die RegEx nicht im Schlaf beherrschen...?Stefan2 wrote:Klasse Idee GammelBert.GammelBert wrote:Wenn du dich mich RegExp auskennst, sollte das auch mit dem Multi-Rename tool und Suchen/Ersetzen klappen.
Poste doch mal, wie das aussehen könnte....


Search for:
Code: Select all
((.+ Staffel )0*([2-9]|\d\d+))$
Code: Select all
$2\1\\$1
http://imgur.com/oqPxeTu
EDIT: Regex ein bisschen bereinigt und angepasst um auch mit vorangestellten Nullen und dem recht unwahrscheinlichen Fall klarzukommen, dass eine Serie einhundert oder mehr Staffeln hat. Der Screenshot zeigt aber immer noch den alten Regex, der nur Serien mit max. 99 Staffeln handhaben kann. Bin zu faul, einen neuen zu machen...

MUT: Ordner per RegEx einsortieren
Gute Idee!
Vor allem das escapen der Ziffer 1 im Replacement hat mir gefehlt.
Meine Version:
Search: ^(.+?)(\s*)(0*[2-9]|\d{2,})$
Replace: $1$2\1\\$1$2$3
Bzw. zum gezielten Aufräumen (Leerzeichen vor Staffelnummer einfügen)
Replace: $1 \1\\$1 $3
[X]RegEx
Erklärung:
(.+?) > $1 > nicht gierig ein-oder-viele beliebiges Zeichen, gefolgt von
(\s*) > $2 > ein-oder-kein Leerzeichen, gefolgt von
(0*[2-9]|\d{2,}) > $3 > keine-oder-viele Ziffer Null,
gefolgt von *einer* Ziffer 2,3,4.. bis 9
ODER
gefolgt von zwei-oder-viele Ziffern (Zifferngruppe größer als '9')
Beispiel:
Gute Lösung.
Vor allem das escapen der Ziffer 1 im Replacement hat mir gefehlt.
Meine Version:
Search: ^(.+?)(\s*)(0*[2-9]|\d{2,})$
Replace: $1$2\1\\$1$2$3
Bzw. zum gezielten Aufräumen (Leerzeichen vor Staffelnummer einfügen)
Replace: $1 \1\\$1 $3
[X]RegEx
Erklärung:
(.+?) > $1 > nicht gierig ein-oder-viele beliebiges Zeichen, gefolgt von
(\s*) > $2 > ein-oder-kein Leerzeichen, gefolgt von
(0*[2-9]|\d{2,}) > $3 > keine-oder-viele Ziffer Null,
gefolgt von *einer* Ziffer 2,3,4.. bis 9
ODER
gefolgt von zwei-oder-viele Ziffern (Zifferngruppe größer als '9')
Beispiel:
Code: Select all
VON:
Serienname Serie1 - Staffel 1\
Serienname Serie1 - Staffel 2\
Serienname Serie1 - Staffel3\
Serienname Serie1 - Staffel4\
Serienname Serie 3 - Staffel 1\
Serienname Serie 3 - Staffel 02\
Serienname Serie 3 - Staffel 11\
Serienname Serie 3 - Staffel 44\
Serienname Serie 6 - Staffel 2\
Serienname Serie 6 - Staffel 3\
Serienname Serie 6 - Staffel 21\
Serienname Serie 6 - Staffel 666\
Serienname Serie 7 - S6\
Serienname Serie 7 - S7\
Serienname Serie 7 - S8\
ZU:
+---Serienname Serie 7 - S 1
| +---Serienname Serie 7 - S 6
| +---Serienname Serie 7 - S 7
| \---Serienname Serie 7 - S 8
+---Serienname Serie 3 - Staffel 1
| +---Serienname Serie 3 - Staffel 02
| +---Serienname Serie 3 - Staffel 11
| \---Serienname Serie 3 - Staffel 44
+---Serienname Serie 6 - Staffel 1
| +---Serienname Serie 6 - Staffel 2
| +---Serienname Serie 6 - Staffel 21
| +---Serienname Serie 6 - Staffel 3
| \---Serienname Serie 6 - Staffel 666
\---Serienname Serie1 - Staffel 1
+---Serienname Serie1 - Staffel 2
+---Serienname Serie1 - Staffel 3
\---Serienname Serie1 - Staffel 4
Gute Lösung.