Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Inhalt von Profilordnern per batch kopieren

Frage Entwicklung Batch & Shell

Mitglied: PittoS

PittoS (Level 1) - Jetzt verbinden

27.06.2011, aktualisiert 17:04 Uhr, 4101 Aufrufe, 13 Kommentare, 1 Danke

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:
01.
REM @echo off 
02.
 
03.
set /P profiles=Bitte Pfad zu den Profilen eingeben:  
04.
 
05.
dir /b %profiles% > c:\profile_test\profiles.log 
06.
 
07.
cd %profiles% 
08.
 
09.
for /f "delims=" %%a in (c:\profile_test\profiles.log) do cd %profiles%\%%a & ^ 
10.
for /f "delims=" %%b in ('dir /b /s') do robocopy "%%b" %profiles%\%%a\NEU_DOKS\ /S /E /COPYALL /MIR & pause 
11.
 
12.
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
Mitglied: bastla
27.06.2011 um 17:17 Uhr
Hallo PittoS!

Wie gewünscht nur ein Ansatz : 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
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 17:35 Uhr
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:
01.
dir /b /a:d  
02.
rem liefert alle Verzeichnisse in einem Dateipfad 
03.
 
04.
xcopy /s /e /k "Pfad\*" "Ziel\" 
05.
rem Kopiert den Inhalt eines Pfades/Ordners in ein Ziel (mit Verzeichnissen)
[edit: Parameter /k hinzugefügt]

Mathe172
Bitte warten ..
Mitglied: bastla
27.06.2011 um 18:32 Uhr
@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
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 18:58 Uhr
Hallo,

In diesen Ordnern
Hab ich wohl überlesen

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"
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 09:15 Uhr
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

01.
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:

01.
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....
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 09:56 Uhr
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:

01.
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
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 12:01 Uhr
Hallo nochmal,

Dieses Script funktioniert, nur leider nicht ganz wie gedacht.

01.
REM @echo off 
02.
 
03.
set tempdir=c:\Test1 
04.
 
05.
set /P profiles=Bitte Pfad zu den Profilen eingeben:  
06.
 
07.
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\" 
08.
pause 
09.
for /d %%a in ("%profiles%") do for /f "delims=" %%b in ('dir /b /a:d "%%a"') do rd /s /q "%profiles%\%%b\" 
10.
pause 
11.
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\" 
12.
pause 
13.
 
14.
rd /s /q %tempdir% 
15.
pause 
16.
 
17.
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
Bitte warten ..
Mitglied: bastla
28.06.2011 um 14:39 Uhr
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
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 14:55 Uhr
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
Bitte warten ..
Mitglied: bastla
28.06.2011 um 15:04 Uhr
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
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 15:35 Uhr
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
Bitte warten ..
Mitglied: PittoS
28.06.2011 um 16:49 Uhr
Hallo nochmal,

ich denke ich habs.

01.
@echo off 
02.
set newdir=Eigene Dokumente 
03.
set /P profiles=Bitte Pfad zu den Profilen eingeben:  
04.
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 
05.
pause 
06.
exit
Mal schauen ob es so zufriedenstellend ist, wie ich mir das denke ;)

Vielen Dank und viele Grüsse
Pitto
Bitte warten ..
Mitglied: PittoS
14.07.2011 um 14:23 Uhr
So Skript hat funktioniert und war zufrieden stellend.

Thema erledigt! Danke!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...