Sortieren / Syncronisieren über Unterordner hinweg

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
denkh
Junior Member
Junior Member
Posts: 4
Joined: 2006-05-26, 09:25 UTC

Sortieren / Syncronisieren über Unterordner hinweg

Post by *denkh »

Hallo,
vorab Danke für die Hilfe.
Folgende Aufgabe:
Ich habe aus einer Datenrettung verschiedenste Dateitypen gemischt in diversen Unterordnern. Diese möchte ich nach Dateityp in neue Ordner sortieren.
Zwei Wege habe ich versucht:
1. Suche nach Dateityp über alle Unterordner, habe dann aber keine Möglichkeit entdeckt die gefundenen Dateien zu verschieben oder zumindest zu kopieren.
2. Syncronisieren des Ordners über den Unterordnern mit einem neuen leeren jeweils für einen Dateityp. Das funktioniert, aber im Zielordner sind die Dateien nicht im root, sondern wieder auf die ganzen Unterverzeichnisse verteilt.

Freue mich über jeden Vorschlag, danke vorab.
Viele Grüße, denkh
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Re: Sortieren / Syncronisieren über Unterordner hinweg

Post by *tuska »

denkh wrote:1. Suche nach Dateityp über alle Unterordner, habe dann aber keine Möglichkeit entdeckt die gefundenen Dateien zu verschieben oder zumindest zu kopieren.
- auf den Button "Anwenden" drücken im "Dateien suchen"-Fenster
- Strg + a drücken
- F6 Bewegen in den zuvor angelegten Ordner im anderen Fenster

oder vielleicht so:
- Strg + B = Zweigansicht (mit Unterverzeichnissen), zB im Pfad D:\
- Markieren einer Datei, zB .jpg, dann ALT und + (Pluszeichen) auf dem Ziffernblock (alle .jpg-Dateien werden markiert)
(Menü "Markieren" - "Alle Dateien mit gleicher Erweiterung markieren Alt Num +")
- F6 Bewegen in den zuvor angelegten Ordner im anderen Fenster
- Markieren einer Datei mit einer anderen Extension, zB .doc, dann ALT und + (Pluszeichen) auf dem Ziffernblock, ... usf.
User avatar
sqa_wizard
Power Member
Power Member
Posts: 3854
Joined: 2003-02-06, 11:41 UTC
Location: Germany

Post by *sqa_wizard »

Ich denke "Mover-Plugin" tut genau das. (Separate files depending on filetype into folders)
Details siehe hier ...
#5767 Personal license
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: Dateityp Erweiterung Sortieren neue Ordner

Post by *Stefan2 »

 
denkh wrote: Folgende Aufgabe:
Ich habe aus einer Datenrettung verschiedenste Dateitypen gemischt in diversen Unterordnern.

Diese möchte ich nach Dateityp in neue Ordner sortieren.

Hier als Beispiel mit Bordmitteln (PowerShell):

Das Folgende hat bei mir funktioniert, aber teste es mal Vorsichtig aus, am Besten mit einem Backup im Hintergrund.


# Benötigt PowerShell v3 (oder Neuer)

Code: Select all

GCI -Rec -File | Select -First 3 | 
ForEach{$T="H:\Mein Ziel" + $($_.Extension -replace '\.'); 
IF(-not(Test-Path $T)){New-item -type directory -Path $T}; 
COPY $_.FullName $T\$_}
(Eine einzige lange Zeile!)




Hier nochmal der Code ohne COPY-Funktion, mit reiner Textausgabe, einfach zum ausprobieren ob der Kode funktionieren würde:
GCI -Rec -File | Select -First 3 | ForEach{$T="H:\Mein Ziel" + $($_.Extension -replace '\.'); """IF(-not(Test-Path $T)){New-item -type directory -Path $T}; COPY $_.FullName $T\$_"""}








Erklärung:
- öffne eine PowerShell-Konsole
- navigiere zu deinem "Hauptordner" mit den "diversen Unterordnern"
- Kopiere den Code und füge ihn in die PoSh-Konsole ein (Das ist jeweils eine einzige lange Zeile!)
- <ENTER>

- "GCI -Rec -File" listed recursive(-rec) alle Dateien(-file, benötigt PSv3) auf. (GCI = Get-ChildItem)

- "Select -First 3 |" verarbeitet nur die jeweils ersten drei Dateien pro Durchgang zwecks austesten, entferne diesen Teil um alle Dateien zu verarbeiten.

- "|ForEach{...}" verarbeitet jede gefundene Datei.

- Als neues Ziel ($T wie Target) wird "H:\Mein Ziel" + die aktuelle Dateierweiterung angegeben (zB: "H:\Mein Ziel\TXT").

- Falls noch nicht existent, wird im Ziel ein neuer Unterordner
    mit der aktuellen Dateierweiterung angelegt (IF(-not(Test-Path $T)) THEN MakeDir $T).

- Als Letztes wird die aktuelle Datei zum Ziel kopiert (COPY), bzw. verschoben (MOVE).


Sicherheitsmassnahmen:
- habe ein Backup
- verwende erst mal den Code mit Textausgabe ohne Copy-Funktion
- verwende erst mal "select -first x"
- verwende erst mal COPY statt MOVE im Code
- verwende erst mal "GCI -Include *.txt"


- - -

Für PSv2 müssten wir das "-File" Argument von GCI durch eine weitere Pipeline ersetzen:
GCI -Rec |where{-not $_.PSisContainer} |
anstatt
GCI -Rec -File |

# Benötigt PowerShell v2 (oder Neuer)

Code: Select all

GCI -Rec |where{-not $_.PSisContainer} | Select -First 3 | 
ForEach{$T="H:\Mein Ziel" + $($_.Extension -replace '\.'); 
IF(-not(Test-Path $T)){New-item -type directory -Path $T}; 
COPY $_.FullName $T\$_}
(Eine einzige lange Zeile!)



 
denkh
Junior Member
Junior Member
Posts: 4
Joined: 2006-05-26, 09:25 UTC

Danke Euch für die detaillierte Hilfe

Post by *denkh »

Hat sehr geholfen.
Post Reply