dervik
Goto Top

Verschieben von Dateien eines bestimmten Besitzers

Hallo,

ich benötige für folgende Problematik ein paar Tipps bzw. Anregungen:

wie kann ich nur die Dateien jedoch nicht die Ordner eines bestimmten Besitzers aus meinem Server in ein anderes System verschieben, vorzugsweise sollte auf dem Zielsystem ein Abbild der Ordnerstruktur der verschobenen Dateien mit erstellt werden.

Vielen Dank für Vorschläge

Content-Key: 208903

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: oneMAK
oneMAK Jul 01, 2013 at 21:28:33 (UTC)
Goto Top
mach einen suche nach *.* und kopiere nur die Daten in das Zielsystem
Member: Biber
Biber Jul 02, 2013 updated at 07:56:58 (UTC)
Goto Top
Moin dervik,

sinngemäß mit einer Zeile vom CMD-Prompt nach folgendem Muster:
-> Wenn denn die Dateien des Benutzers "user123" von einem Laufwerk "X" auf ein Laufwerk U:\ verschoben werden sollen:
for /d /r  "X:\" %v in (*) do @for /f "tokens=5" %i in ('dir "%~v" /a-d /q^|find /i "user123"') do @(ECHO md "U:\%~pnxvi" 2>nul) & @ECHO move "%~v\%~i" "U:\%~pnxv\"

- die beiden @echos sind nur zum gefahrlosen Testen und zeigen, was passieren würde
- for /d /r "X:\" %v in (*) --> geht mit der Laufvaiablen %v wie Verzeichnis über alle Unterordner des Laufwerks X:\
- for /f "tokens=5" %i in ('dir "%~v" /a-d /q^|find /i "user123"') --> sucht alle Dateien von "user123" je gefundenem Unterverzeichnis
- danach wird ein md "neuesLw\alterVerzeichnisname gemacht, der in 95% aller Fälle überflüssig ist ("Verzeichnis schon vorhanden"), deshalb "2>nul"
- danach wird ein MOVE DateiVonUser123 von X: nach U: gemacht

- alles natürlich ungetestet

Grüße
Biber
Member: dervik
dervik Jul 02, 2013 at 12:36:15 (UTC)
Goto Top
Zitat von @Biber:
Moin dervik,

sinngemäß mit einer Zeile vom CMD-Prompt nach folgendem Muster:
-> Wenn denn die Dateien des Benutzers "user123" von einem Laufwerk "X" auf ein Laufwerk U:\ verschoben
werden sollen:
> for /d /r  "X:\" %v in (*) do @for /f "tokens=5" %i in ('dir "%~v" /a-d /q^|find /i
> "user123"') do @(ECHO md "U:\%~pnxvi" 2>nul) & @ECHO move "%~v\%~i"
> "U:\%~pnxv\"
> 

- die beiden @echos sind nur zum gefahrlosen Testen und zeigen, was passieren würde
- for /d /r "X:\" %v in (*) --> geht mit der Laufvaiablen %v wie Verzeichnis über alle Unterordner des
Laufwerks X:\
- for /f "tokens=5" %i in ('dir "%~v" /a-d /q^|find /i "user123"') --> sucht alle
Dateien von "user123" je gefundenem Unterverzeichnis
- danach wird ein md "neuesLw\alterVerzeichnisname gemacht, der in 95% aller Fälle überflüssig ist
("Verzeichnis schon vorhanden"), deshalb "2>nul"
- danach wird ein MOVE DateiVonUser123 von X: nach U: gemacht

- alles natürlich ungetestet

Grüße
Biber

Hallo Biber,

vorab vielen Dank für deine Hilfe!

Ich bekomme beim Aufruf von

for /d /r "T:\" %v in (*) do @for /f "tokens=5" %i in ('dir "%~v" /a-d /q^|find /i "user123"') do @(ECHO md "F:\Test\%~pnxvi" 2>nul) & @echo move "%~v\%~i" "F:\Test\%~pnxv\"

folgenden Fehler:

Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~v" /a-d /q^|find /i "user123"') do @(ECHO md "F:\Test\%~pnxvi" 2>nul) & @echo move "%~v\%~i" "F:\Test\%~pnxv\"

Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig sind.
Member: Biber
Biber Jul 02, 2013, updated at Jul 03, 2013 at 07:36:09 (UTC)
Goto Top
Moin dervik,

deshalb schrieb ich ja "ungetestet"...

Okay, ich habe es bei mir mit Quell-laufwerk T:\ und Zeile\-Rootverzeichnis F:\Test nochmal probiert und wenigstens noch einen überflüssige "\" und eine "Datei nicht gefunden"-Fehlermeldung aus der Beispielzeile rausgeworfen.

Und ganz wichtig - statt "nur" auf den Usernamen - im Beispiel user123 zu filtern, besser auf Kombination "dieDomain\derUsername".
Sonst werden -zumindest bei mir - viel zu viel Dateien gefunden, die meinen Usernamen beinhalten

for /d /r  "T:\" %v in (*) do @for /f "tokens=5" %i in ('dir "%~v\" /a-d /q ^2^>nul^|find /i "dieDomain\user123"') do @(ECHO md "F:\test\%~pnxv" 2>nul) & @ECHO move "%~v\%~i" "F:\test%~pnxv\"

So würde es aber bei mir ein Ergebnis bringen, wenn ich es vom CMD-Prompt absende.

Wenn es bei dir Fehler bringt, dann taste dich in Etappen heran:
Zuerst:
- for /d /r "T:\" %v in (*) do @echo "%~v"
dann:
- for /d /r "T:\" %v in (*) do @or /f "tokens=5" %i in ('dir "%~v\" /a-d /q ^2^>nul^|find /i "dieDomain\user123"') do @echo "%~v\%~i"

Damit wir sehen, wo es schiefgeht.

Grüße
Biber
Member: dervik
dervik Jul 03, 2013 at 06:28:46 (UTC)
Goto Top
Hi Biber,

läuft klasse! Ein kleinen Schönheitsfehler gibt’s noch, sofern "gefundene" Dateien ein Leerzeichen beinhalten scheint die Geschichte nicht sauber zu laufen.. Ist das bei dir auch so?

Gruß
Member: Biber
Biber Jul 03, 2013 at 07:50:53 (UTC)
Goto Top
Moin dervik,

jep, sorry.
IT-Regel 4: Die beim Testen eingesparten Minuten kosten immer ein paar Stunden Nacharbeit..

Ändere bitte das "@for /f "tokens=5" %i" in ein "@for /f "tokens=4,*" %h" um.

Grüße
Biber
Member: dervik
dervik Jul 03, 2013 updated at 15:24:50 (UTC)
Goto Top
vielen Dank funktioniert nun einwandfrei.

Komischerweise hab ich heute durch Zufall folgendes kleine Tool gefunden:

http://retired.beyondlogic.org/solutions/delbyowner/delbyowner.htm