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
Sortieren / Syncronisieren über Unterordner hinweg
Moderators: Hacker, Stefan2, white
Re: Sortieren / Syncronisieren über Unterordner hinweg
- auf den Button "Anwenden" drücken im "Dateien suchen"-Fensterdenkh wrote:1. Suche nach Dateityp über alle Unterordner, habe dann aber keine Möglichkeit entdeckt die gefundenen Dateien zu verschieben oder zumindest zu kopieren.
- 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.
- sqa_wizard
- Power Member
- Posts: 3893
- Joined: 2003-02-06, 11:41 UTC
- Location: Germany
Ich denke "Mover-Plugin" tut genau das. (Separate files depending on filetype into folders)
Details siehe hier ...
Details siehe hier ...
#5767 Personal license
PowerShell: Dateityp Erweiterung Sortieren neue Ordner
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\$_}
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\$_}
Danke Euch für die detaillierte Hilfe
Hat sehr geholfen.