pittos
Goto Top

Inhalt von Profilordnern per batch kopieren

Wie kann ich mit einem Batch-Script den Inhalt mehrerer Profile in andere Ordner kopieren?

Hallo zusammen,

ich bin relativ neu in der Batch-Erstellung, versuche mich allerdings schon seit einer guten Woche daran.

Folgendes Szenario, wie es später sein soll:

Es gibt auf einem Server einen Ordner, wo die ganzen Profilordner abgelegt sind.
In diesen Ordnern soll nun ein neuer Ordner erstellt werden und "der Inhalt" der Profilordner soll in diese neuen Ordner verschoben werden.

Soviel zum soll.

Um das Ganze zu testen, bleibe ich erst einmal beim kopieren (anstatt verschieben).

Hier mein aktuelles Script:
REM @echo off

set /P profiles=Bitte Pfad zu den Profilen eingeben: 

dir /b %profiles% > c:\profile_test\profiles.log

cd %profiles%

for /f "delims=" %%a in (c:\profile_test\profiles.log) do cd %profiles%\%%a & ^  
for /f "delims=" %%b in ('dir /b /s') do robocopy "%%b" %profiles%\%%a\NEU_DOKS\ /S /E /COPYALL /MIR & pause  

exit

Momentan wird nur der Inhalt des ersten Profils in den neuen Ordner kopiert, der Inhalt der anderen Profile landet leider im selben Ordner, da er bei %%a wohl nur die erste Zeile der profiles.log übernimmt.

Wie geht man nun weiter vor?
Lösungsansätze würden mir wohl reichen, möchte ja nicht, dass man mir die Arbeit abnimmt ;)

Viele Grüsse
Pitto

Content-Key: 168699

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

Printed on: May 8, 2024 at 04:05 o'clock

Member: bastla
bastla Jun 27, 2011 at 15:17:32 (UTC)
Goto Top
Hallo PittoS!

Wie gewünscht nur ein Ansatz face-wink: Anstelle der Verwendung einer Temporärdatei kannst Du gleich direkt mit einer Schleife alle Profilordner durchgehen:
for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /ad "%%a"') echo Kopiere "%%a\%%b" nach "%%a\NEU_DOKS\%%b\"
Grüße
bastla
Member: mathe172
mathe172 Jun 27, 2011 at 15:35:34 (UTC)
Goto Top
Hallo,

@bastla: Ich glaube in der Profilesvariable steht nur ein Pfad und er will (wenn ich das richtig verstanden habe) nicht den Ordner, sondern nur den Inhalt kopieren.

@PittoS:
Als ansatz:
dir /b /a:d 
rem liefert alle Verzeichnisse in einem Dateipfad

xcopy /s /e /k "Pfad\*" "Ziel\"  
rem Kopiert den Inhalt eines Pfades/Ordners in ein Ziel (mit Verzeichnissen)
[edit: Parameter /k hinzugefügt]

Mathe172
Member: bastla
bastla Jun 27, 2011 at 16:32:58 (UTC)
Goto Top
@mathe172
Auf "alle Ordner" bin ich durch
In diesen Ordnern
gekommen ...
Mit "xcopy" in einen (Ziel-)Ordner, der innerhalb der Quellordnerstruktur liegen soll, kopieren wird, fürchte ich, nix werden; mit einen Temp-Ordner (der danach an die richtige Stelle verschoben wird) als Ziel könnte das klappen - allerdings wären dann die NTFS-Rechte zu beachten ...

... und BTW: Zusätzlich zu einem "/e" solltest Du kein "/s" brauchen.

Grüße
bastla
Member: mathe172
mathe172 Jun 27, 2011 at 16:58:40 (UTC)
Goto Top
Hallo,

In diesen Ordnern
Hab ich wohl überlesen face-smile

Das andere funktioniert bei mir, ich kopiere ja alles von Ordner Profile/Profil1 nach Profile/NeuerOrdner, aber du hast recht, ein "/exclude:Ziel\" kann nicht schaden...

Aber schauen wir mal, ob wir den TO richtig verstanden haben.
Mathe172
P.S.:@PittoS: "pushd" und "popd" finde ich schöner als "cd"
Member: PittoS
PittoS Jun 28, 2011 at 07:15:05 (UTC)
Goto Top
Hi ihr beiden,

danke schon einmal für die Hilfe.

Es ist tatsächlich so, dass ich nicht die Ordner an sich, sondern nur den Inhalt kopieren/verschieben möchte.
Allerdings werden bei xcopy bei meinem Script momentan die Berechtigungen nicht übernommen.
Die entsprechenden Ordner kopiere ich erstmal nach c.\Test1\%profilname%\NEU_DOKS\
Bei robocopy werden die ordner an sich kopiert, nicht nur der Inhalt...
Da hat robocopy wohl Probleme mit Variablen in Anführungsstrichen.

Hier das Kopieren mit xcopy

for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do xcopy /T /E /H /K /O "%%a\%%b\*.*" "c:\Test1\%%b\NEU_DOKS\" & pause  

ich dachte xcopy könnte die berechtigungen schon mit übernehmen, oder hab ich da irgendwo nen kleinen Fehler drin?

Um das ganze mit robocopy zu realisieren müsste ich sowas angeben wie "%%a\%%b\" (mit dem backslash), was er dann aber nicht übernimmt...

Viele Grüsse
Pitto

PS: folgender code funktioniert mit robocopy für das erste Verzeichnis, da dieses keine Leerzeichen im Namen besitzt:

for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do robocopy %%a\%%b\ c:\Test1\%%b\NEU_DOKS\ /S /E /COPYALL /MIR & pause  

Dies macht er, weil keine Anführungsstriche vorhanden sind, allerdings macht er das natürlich nicht wenn ein Verzeichnis mit Leerzeichen im Namen vorhanden ist....
Member: PittoS
PittoS Jun 28, 2011 at 07:56:12 (UTC)
Goto Top
Hallo nochmal,

ich habe wieder eine Erkenntnis gewonnen. Bei xcopy werden nur die Berechtigungen vom Verzeichnis übernommen, von wo aus die Berechtigungen vererbt werden, allerdings hilft das auch nur bedingt weiter.

hier der Code mit xcopy:

for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do xcopy /T /E /H /K /O "%%a\%%b" "c:\Test1\%%b\NEU_DOKS\" & pause  

Hierbei werden die Berechtigungen dann auf den neuen Ordner NEU_DOKS übernommen.
Bleibt nun abzuwarten ob dies in der Praxis anwendbar ist.
Ich meld mich wieder ;)

Viele Grüsse
Pitto
Member: PittoS
PittoS Jun 28, 2011 at 10:01:29 (UTC)
Goto Top
Hallo nochmal,

Dieses Script funktioniert, nur leider nicht ganz wie gedacht.

REM @echo off

set tempdir=c:\Test1

set /P profiles=Bitte Pfad zu den Profilen eingeben: 

for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do xcopy /T /E /H /K /O "%%a\%%b" "c:\Test1\%%b\NEU_DOKS\"  
pause
for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do rd /s /q "%profiles%\%%b\"  
pause
for /d %%a in ("%tempdir%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do xcopy /T /E /H /K /O "%%a\%%b" "%profiles%\%%b\"  
pause

rd /s /q %tempdir%
pause

REM exit

Die Profile werden von einem Ordner in den anderen Ordner kopiert. Das erste Problem dabei, die Berechtigungen liegen nur noch auf dem neuen Ordner NEU_DOKS und nicht mehr auf dem Profilordner selber.
Anschliessend werden die Profilordner erstellt und aus dem neuen Ordner wieder kopiert.
Allerdings haben die neuen Profilordner nun keine speziellen Berechtigungen mehr....

Hat da vielleicht jemand eine Idee? Eigentlich sollte ja eh nur der "Inhalt" kopiert werden und nicht der komplette Ordner...

Viele Grüsse
Pitto
Member: bastla
bastla Jun 28, 2011 at 12:39:24 (UTC)
Goto Top
Hallo PittoS!

Nur mal kurz die Zwischenfrage: Was ist denn der eigentliche Sinn der ganzen Aktion, welches Ergebnis soll am Ende stehen?

Grüße
bastla
Member: PittoS
PittoS Jun 28, 2011 at 12:55:48 (UTC)
Goto Top
Hallo Bastla,

dachte das hätte ich oben schon geschrieben.
Auf einem Server in einem Pfad, wo sich die Profilordner befinden, sollen die Dateien aus den Profilen in einen neuen Ordner (unter dem selben Pfad) verschoben werden.

alt:
%username%\%daten%

neu:
%username%\Eigene Doks\%daten%

so ungefähr....


bin jetzt soweit, dass ich das neue verzeichniss mit den entsprechen dateien habe, allerdings muss ich noch den alten ordner entfernen, per script hab ich das noch nicht geschafft....


Viele Grüsse
Pitto
Member: bastla
bastla Jun 28, 2011 at 13:04:38 (UTC)
Goto Top
Hallo PittoS!

So ganz deutlich war's für mich nicht - ist aber (wenn es schon mal soweit geklappt hat) ja eigentlich auch nicht mehr wichtig ...
allerdings muss ich noch den alten ordner entfernen, per script hab ich das noch nicht geschafft....
Da es ja jetzt unterhalb von %username% eigentlich nur noch den Ordner "Eigene Doks" geben darf, könntest Du folgende ungetestete Schleife versuchen:
for /d %%i in ("%profiles%") do for /f "delims=" %%a in ('dir /b /ad "%%i"^|findstr /v /c:"Eigene Doks"') do echo rd /s /q "%%~i\%%~a"
Das "Sicherheits"-echo dient dazu, die Löschbefehle nur anzeigen zu lassen ...

Grüße
bastla
Member: PittoS
PittoS Jun 28, 2011 at 13:35:39 (UTC)
Goto Top
Hallo bastla,

danke für die Hilfe, aber nun ist es leider notwendig vom Kopieren auf das Verschieben zu wechseln... sprich sollte der Inhalt der entsprechenden Profile in einen Tempordner verschoben werden und wenn der neue Ordner erstellt wurde in diesen neuen Ordner verschoben werden...

Es soll nichts mehr kopiert werden (nur im testfall) weil sonst zu viele Datenmengen entstehen.

Hoffe das ist einigermassen klar, war für mich am Anfang auch nicht so klar.

Viele Grüsse
Pitto
Member: PittoS
PittoS Jun 28, 2011 at 14:49:40 (UTC)
Goto Top
Hallo nochmal,

ich denke ich habs.

@echo off
set newdir=Eigene Dokumente
set /P profiles=Bitte Pfad zu den Profilen eingeben: 
for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do robocopy "%%a\%%b" "%profiles%\%%b\%newdir%" /XD "%newdir%" /S /E /COPYALL /MOVE  
pause
exit

Mal schauen ob es so zufriedenstellend ist, wie ich mir das denke ;)

Vielen Dank und viele Grüsse
Pitto
Member: PittoS
PittoS Jul 14, 2011 at 12:23:09 (UTC)
Goto Top
So Skript hat funktioniert und war zufrieden stellend.

Thema erledigt! Danke! face-smile