Dateien suchen und Ordner verschieben
Moin,
ich möchte folgendes und ich hoffe ich bin nicht der 1000ste mit dieser Frage :D
Dateien anhand einer beliebigen Datei-Extension auf der lokalen Platte (z.B. Laufwerk D: ) suchen.
Dann den nur jeweils "letzten" Ordner in der Hierarchie an einen anderen (beliebigen) Ort (z.B. Laufwerk E: ) verschieben (natürlich inklusive aller Dateien innerhalb dieses Ordners).
Ich will natürlich nicht erst in die Ordnerstruktur hineinmüssen...es soll selbständig rekursiv die Platte durchforsten
Der automatisch erzeugte Zielordnername soll natürlich dem "letzten" Ordnernamen entsprechen...
Also z.B. "finde *.abc auf D:"
(gefunden) von hier
d:\ordner1\ordner2\ordner3\datei001.abc
(verschoben) nach hier
e:\ordner3\datei001.abc
Ich hoffe ich konnte es einigermaßen darstellen ;)
Gibt es dafür ein Tool? (ich konnte jedoch bislang kein geeignetes finden, alle Such-Move-Tools die ich bislang finden konnte, konnten das irgendwie nicht so...)
ciao andy
ich möchte folgendes und ich hoffe ich bin nicht der 1000ste mit dieser Frage :D
Dateien anhand einer beliebigen Datei-Extension auf der lokalen Platte (z.B. Laufwerk D: ) suchen.
Dann den nur jeweils "letzten" Ordner in der Hierarchie an einen anderen (beliebigen) Ort (z.B. Laufwerk E: ) verschieben (natürlich inklusive aller Dateien innerhalb dieses Ordners).
Ich will natürlich nicht erst in die Ordnerstruktur hineinmüssen...es soll selbständig rekursiv die Platte durchforsten
Der automatisch erzeugte Zielordnername soll natürlich dem "letzten" Ordnernamen entsprechen...
Also z.B. "finde *.abc auf D:"
(gefunden) von hier
d:\ordner1\ordner2\ordner3\datei001.abc
(verschoben) nach hier
e:\ordner3\datei001.abc
Ich hoffe ich konnte es einigermaßen darstellen ;)
Gibt es dafür ein Tool? (ich konnte jedoch bislang kein geeignetes finden, alle Such-Move-Tools die ich bislang finden konnte, konnten das irgendwie nicht so...)
ciao andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188105
Url: https://administrator.de/contentid/188105
Ausgedruckt am: 26.11.2024 um 13:11 Uhr
22 Kommentare
Neuester Kommentar
Hallo rocky2k!
Kannst Du ausschließen, dass es etwa in "ordner1" oder "ordner2" auch Dateien vom Typ ".abc" gibt, bzw falls nicht, wie soll mit diesen Ordnern verfahren werden?
Außerdem: Kann etwa auch ein Ordner "D:\ordner4\ordner3" existieren, und wenn ja, sollen dann die Dateien in den vorher schon erstellten Ordner "e:\ordner3" verschoben werden, und wenn ja, kann es dort zu Kollisionen von gleichnamigen Dateien kommen?
Grüße
basla
Kannst Du ausschließen, dass es etwa in "ordner1" oder "ordner2" auch Dateien vom Typ ".abc" gibt, bzw falls nicht, wie soll mit diesen Ordnern verfahren werden?
Außerdem: Kann etwa auch ein Ordner "D:\ordner4\ordner3" existieren, und wenn ja, sollen dann die Dateien in den vorher schon erstellten Ordner "e:\ordner3" verschoben werden, und wenn ja, kann es dort zu Kollisionen von gleichnamigen Dateien kommen?
Grüße
basla
Hallo rocky2k!
Grüße
bastla
die namen "ordner1" "ordner2" etc. sollten nur die verzeichnistiefe symbolisieren, also die namen sind grundsätzlich völlig beliebig.
Dass es sich dabei nur um Beispiele handelt, war mir schon klar - es bleibt aber trotzdem die Frage nach gleichnamigen Ordnern / Dateien in unterschiedlichen Pfaden offen ...Grüße
bastla
... aber um zumindest einmal einen Überblick zu bekommen, könntest Du folgenden Batch testen:
Die gefundenen Ordner könnten dann in dieser Reihenfolge (also jeweils vom Ende des Pfades her) verarbeitet werden ...
Grüße
bastla
@echo off & setlocal
set "Suche=D:\*.abc"
set "Ordnerliste=%temp%\Ordner.txt"
>"%Ordnerliste%" type nul
for /f "delims=" %%i in ('dir /s/b/a-d "%Suche%"') do (
set "Ordner=%%~dpi"
setlocal enabledelayedexpansion
findstr /ic:"!Ordner:\=\\!" "%Ordnerliste%">nul||>>"%Ordnerliste%" echo !Ordner!
endlocal
)
sort /r "%Ordnerliste%"
pause
Grüße
bastla
Hallo rocky2k!
Soferne der obige Ansatz vernünftige Ergebnisse liefert, könntest Du folgenden Batch testen:
Die entscheidende Zeile 18 ist durch das "
Das etwas ungewöhnlich aussehende "
Grüße
bastla
Soferne der obige Ansatz vernünftige Ergebnisse liefert, könntest Du folgenden Batch testen:
@echo off & setlocal
set "Suche=D:\*.abc"
:: Zielangabe immer mit abschließendem "\" schreiben!
set "Ziel=E:\"
set "Ordnerliste=%temp%\Ordner.txt"
>"%Ordnerliste%" type nul
for /f "delims=" %%i in ('dir /s/b/a-d "%Suche%" 2^>nul') do (
set "Ordner=%%~dpi"
setlocal enabledelayedexpansion
findstr /ic:"!Ordner:\=\\!" "%Ordnerliste%">nul||>>"%Ordnerliste%" echo !Ordner!
endlocal
)
md "%Ziel%" 2>nul
for /f "delims=" %%i in ('sort /r "%Ordnerliste%"') do for /f "delims=" %%o in ("%%i\dummy\..") do (
if not exist "%Ziel%%%~nxo" (
echo move "%%~dpi..\%%~nxo" "%Ziel%%%~nxo" >nul
) else (
echo "%Ziel%%%~nxo" bereits vorhanden!
)
)
pause
echo
" noch "entschäft" - solange das dort steht, wird der Befehl zum Verschieben des jeweiligen Ordners nur angezeigt ...Das etwas ungewöhnlich aussehende "
%%~dpi..\%%~nxo
" dient übrigens dazu, den "\" am Ende des jeweiligen Pfades aus der Ordnerliste zu eliminieren.Grüße
bastla
@bastla,
mal nur so eine Frage am Rande:
Inwieweit kann man sicherstellen, dass immer der letzte Ordner in richtiger Reihenfolge angegeben wird? Oder anders-her-rum: Durchstöbert ein CMD wirklich von "oben" nach "unten"?
Man sieht sehr oft, dass bei der Windows-Suchfunktion die Reihenfolge der Ordner nicht unbedingt dem entspricht, wie man selber meint, dass es die "richtige" Reihenfolge ist.
Als Beispiel:
Ich habe einen kleinen Audioplayer, mit dem ich eine ganze Partition/ganze Partitionen nach Audio-Dateien durchsuchen kann und alle gefundenen Dateien mir in meine Playlist einträgt. Das entspricht nicht immer der Reihenfolge (auch bei den Ordnern), wie ich es erwartet hätte.
(da sind allerdings VB6 und VBS im Spiel)
Gruss
Tsuki
mal nur so eine Frage am Rande:
Inwieweit kann man sicherstellen, dass immer der letzte Ordner in richtiger Reihenfolge angegeben wird? Oder anders-her-rum: Durchstöbert ein CMD wirklich von "oben" nach "unten"?
Man sieht sehr oft, dass bei der Windows-Suchfunktion die Reihenfolge der Ordner nicht unbedingt dem entspricht, wie man selber meint, dass es die "richtige" Reihenfolge ist.
Als Beispiel:
Ich habe einen kleinen Audioplayer, mit dem ich eine ganze Partition/ganze Partitionen nach Audio-Dateien durchsuchen kann und alle gefundenen Dateien mir in meine Playlist einträgt. Das entspricht nicht immer der Reihenfolge (auch bei den Ordnern), wie ich es erwartet hätte.
(da sind allerdings VB6 und VBS im Spiel)
Gruss
Tsuki
Hallo Tsuki!
Das lässt sich natürlich auch nach VB/VBS übertragen, indem zuerst alle relevanten Pfade ermittelt und dann entsprechend sortiert werden ...
Grüße
bastla
Inwieweit kann man sicherstellen, dass immer der letzte Ordner in richtiger Reihenfolge angegeben wird?
Dazu dient die am Ende durchgeführte Sortierung - da absteigend sortiert wird, wird immer der jeweils längste Pfad (= der am weitesten "unten" liegende Ordner) zuerst verarbeitet ...Das lässt sich natürlich auch nach VB/VBS übertragen, indem zuerst alle relevanten Pfade ermittelt und dann entsprechend sortiert werden ...
Grüße
bastla
Hallo rocky2k!
Hinsichtlich der fehlenden Ausgabe bei Batch 2: Ich hatte vorweg schon das Verschieben getestet und die jeweilige Meldung
per "
mit "
Zum "Zugriff verweigert" kann ich nicht viel sagen - bei meinem Test funktioniert der gepostete Batch (mit nicht überschneidenden Quell-/Zielpfaden) ...
Grüße
bastla
Hinsichtlich der fehlenden Ausgabe bei Batch 2: Ich hatte vorweg schon das Verschieben getestet und die jeweilige Meldung
1 Datei(en) verschoben.
>nul
" unterdrückt - was natürlich bei einem "echo
" davor dann eher kontraproduktiv ist - daher einfach am Ende der Zeile 18 ">nul
" wieder entfernen, um die Ausgabe zu sehen ...Ist Zeile 15 so korrekt?
Weshalb nicht? Es wird der Zielordner (in den dann alle Unterordner sollen) erstellt, oder, wenn schon vorhanden, die resultierende FehlermeldungEin Unterverzeichnis oder eine Datei mit dem Namen "D:\o2" existiert bereits.
2>nul
" unterdrückt.ich musste zum testen nämlich in Zeile 4 den Zielordner manuell auf "D:\o2\" setzen...
Natürlich musst Du angeben, wohin die Ordner sollen (wobei es vermutlich keine gute Idee ist, wenn der Zielordner im "Quellbereich" (es wird ja ab D:\ gesucht) liegt ...Zum "Zugriff verweigert" kann ich nicht viel sagen - bei meinem Test funktioniert der gepostete Batch (mit nicht überschneidenden Quell-/Zielpfaden) ...
Grüße
bastla
Hallo bastla,
naja, bei meinem kleinen Audioplayer ist es relativ Wurscht, wie er die Dinger abspielt, weil er sie eh per Zufall abspielen soll.
Unser rocky2K darf sich dann am besten noch eine Sortierroutine einbauen. Wir wissen ja nicht, um wieviele Ordner sich es rekursiv handeln wird
Bubble-Sort ist dein Freund
Nochmals Danke und viele Grüsse
Tsuki
naja, bei meinem kleinen Audioplayer ist es relativ Wurscht, wie er die Dinger abspielt, weil er sie eh per Zufall abspielen soll.
Unser rocky2K darf sich dann am besten noch eine Sortierroutine einbauen. Wir wissen ja nicht, um wieviele Ordner sich es rekursiv handeln wird
Bubble-Sort ist dein Freund
Nochmals Danke und viele Grüsse
Tsuki
[OT] Hallo Tsuki!
Obwohl meine Frage ausnahmsweise einmal ernst gemeint war, wären 6 Stunden Zeitverschiebung durchaus dazu angetan, die Konzentration etwas zu beeinträchtigen ...
Grüße
bastla
[/OT]
Obwohl meine Frage ausnahmsweise einmal ernst gemeint war, wären 6 Stunden Zeitverschiebung durchaus dazu angetan, die Konzentration etwas zu beeinträchtigen ...
Grüße
bastla
[/OT]
Hallo rocky2k!
Inzwischen habe ich das auch unter XP mit 2 verschiedenen Laufwerken getestet (vorher hatte ich nur von "D:\Quelle\*.abc" nach "D:\Ziel\" verschieben lassen) und kann die Meldung
bestätigen - ein Verschieben auf ein anderes Laufwerk ist mit "
Als Workaround würde sich daher kopieren und löschen anbieten:
Grüße
bastla
Inzwischen habe ich das auch unter XP mit 2 verschiedenen Laufwerken getestet (vorher hatte ich nur von "D:\Quelle\*.abc" nach "D:\Ziel\" verschieben lassen) und kann die Meldung
Zugriff verweigert
move
" (auch mit Admin-Rechten) nicht möglich (hatte ich auch schon mal unter VBS festgestellt).Als Workaround würde sich daher kopieren und löschen anbieten:
@echo off & setlocal
set "Suche=D:\*.abc"
:: Zielangabe immer mit abschließendem "\" schreiben!
set "Ziel=C:\"
set "Ordnerliste=%temp%\Ordner.txt"
>"%Ordnerliste%" type nul
for /f "delims=" %%i in ('dir /s/b/a-d "%Suche%" 2^>nul') do (
set "Ordner=%%~dpi"
setlocal enabledelayedexpansion
findstr /ic:"!Ordner:\=\\!" "%Ordnerliste%">nul||>>"%Ordnerliste%" echo !Ordner!
endlocal
)
md "%Ziel%" 2>nul
for /f "delims=" %%i in ('sort /r "%Ordnerliste%"') do for /f "delims=" %%o in ("%%i\dummy\..") do (
echo Verarbeite "%%i"
if not exist "%Ziel%%%~nxo" (
xcopy /ehk "%%i*" "%Ziel%%%~nxo\">nul && rd /s /q "%%i"
) else (
echo "%Ziel%%%~nxo" bereits vorhanden!
)
)
pause
bastla
Hallo rocky2k!
Sollte nicht am XP liegen, da ich damit getestet habe ...
Wenn Du dem Batch "über die Schulter schauen" möchtest, einfach aus "
Grüße
bastla
Sollte nicht am XP liegen, da ich damit getestet habe ...
Wenn Du dem Batch "über die Schulter schauen" möchtest, einfach aus "
echo off
" ein "echo on
" machen und direkt aus der CMD-Shell starten - auf Wunsch auch mit einer Umleitung der Ausgabe in eine Textdatei, damit Du Dir das dann in Ruhe ansehen kannst - etwa durch Eingabe von:D:\Ordnerverschieben.cmd>D:\Logdatei.txt
bastla