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

Per Batch bzw. Skript Inhalte von Ordnern in andere Ordner mit gleichem Namen verschieben

Frage Entwicklung Batch & Shell

Mitglied: 1garym

1garym (Level 1) - Jetzt verbinden

03.04.2014 um 22:34 Uhr, 1455 Aufrufe, 17 Kommentare, 1 Danke

Hallo,

ich benötige etwas Unterstützung bei der Umsetzung eines größeren Datenumzugs. Nachfolgende Aufgabe soll möglichst automatisiert ablaufen:

Ich möchte aus einem Ordner (C:\Daten\Projekte\123456_Projektname\Aufgaben\Allgemein) alle Dateien/Ordner an einen neuen Ort (D:\NEU) verschieben. Am neuen Speicherort soll unter D:\Daten der Ordner des Projekts (123456_Projektname) erstellt werden und darin soll dann alles (Ordner, Unterordner und Dateien) aus C:\Daten\Projekte\123456_Projektname\1-Aufgaben\01-Allgemein verschoben werden. Die Ordnernamen der Projekte sind immer nach dem Schema 1234_Projektname bzw. 123456_Projektname angelegt worden. Bei den Projektnamen sind auch Leerzeichen und Umlaute dabei, z.B. 123456_Schöner Wohnen usw.

Ich hab hier im Forum schon viele Beiträge gefunden, aber keine passte so richtig zu meinem Vorhaben. Wäre super, wenn mir jemand helfen könnte.

Vorab besten Dank

Gary
Mitglied: Xaero1982
03.04.2014 um 23:14 Uhr
Moin,

nur zum Verständnis:

Du willst Daten aus dem Ordner:
01.
C:\Daten\Projekte\123456_Projektname\Aufgaben\Allgemein
nach

01.
d:\Daten_der_Ordner_des_Projekts_(123456_Projektname)
verschieben oder nach:

01.
d:\123456_Projektname
?

So richtig klar find ich das nicht.

Dann tuts doch ein simpler Copy-Befehl:

01.
copy c:\daten\projekte\*.* d:\*.*
Gruß
Bitte warten ..
Mitglied: 1garym
04.04.2014, aktualisiert um 06:44 Uhr
Hallo,

sorry, ich versuchs nochmal mit einem übersichtlicheren Beispiel

Quelle der Daten (es gibt über 300 dieser Projektordner unter C:\Daten\Projekte) z.B.:

C:\Daten\Projekte\123456_Huber\Aufgaben\Allgemein
C:\Daten\Projekte\123654_Meier\Aufgaben\Allgemein
C:\Daten\Projekte\3214_Müller\Aufgaben\Allgemein

Der gesamte Inhalt (Dateien und ggf. weitere Ordner) von "Allgemein" soll für jedes Projekt an einen anderen Ort verschoben werden. Der Pfad des Ziels ist D:\Daten\Archiv und am Ende soll es so aussehen:

D:\Daten\Archiv\123456_Huber\(hier jetzt der Inhalt von C:\Daten\Projekte\123456_Huber\Aufgaben\Allgemein)
D:\Daten\Archiv\123654_Meier\(hier jetzt der Inhalt von C:\Daten\Projekte\123654_Meier\Aufgaben\Allgemein)
D:\Daten\Archiv\3214_Müller\(hier jetzt der Inhalt von C:\Daten\Projekte\3214_Müller\Aufgaben\Allgemein)

Es muss also unter D:\Daten\Archiv der jeweilige Projektordner (z.B. "3214_Müller") neu angelegt werden und in diesen dann der Inhalt von "Allgemein" eingefügt werden.

Ich hoffe, dass es jetzt nachvollziehbar ist

Vorab besten Dank
Gary
Bitte warten ..
Mitglied: Xaero1982
04.04.2014, aktualisiert um 08:18 Uhr
Evtl. geht es ja so...

01.
@echo off 
02.
for /f "delims=\ tokens=1*" %%i in ('dir "c:\daten\projekte\" /b /ad') do md "d:\daten\archiv\%%i" 
03.
for /f "delims=\ tokens=1*" %%i in ('dir "c:\daten\projekte\" /b /ad') do copy "c:\daten\projekte\%%i\aufgaben\allgemein\*.*" "d:\daten\archiv\%%i\*.*" 
04.
 
Edit: Da du es ja verschieben willst kannst du dann mit:

01.
rd /s /q c:\daten\projekte\
die Ordner löschen - ACHTUNG bei diesem Kommando erfolgt dann keine Nachfrage (/q)

Gruß
ps: irgendwer bekommt das sicher als Einzeiler hin
Bitte warten ..
Mitglied: SaschaRD
04.04.2014 um 08:39 Uhr
Sieht gut aus @xaero

Kleiner Zusatz: falls jemand mit Variablen arbeiten möchte s.u.
01.
set quelle="c:\daten\projekte" 
02.
set ziel="d:\daten\archiv" 
03.
 
04.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\%%i 
05.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do copy %quelle%\%%i\aufgaben\allgemein\*.* %ziel%\%%i\*.*
Gruß, Sascha
Bitte warten ..
Mitglied: Xaero1982
04.04.2014 um 08:47 Uhr
Danke

Deins sieht schöner aus

Gruß
Bitte warten ..
Mitglied: 1garym
04.04.2014 um 09:00 Uhr
Hallo,

super! Wir sind genau auf dem richtigen Weg Beide Varianten funktionieren gleich gut

Folgendes gäbe es noch umzusetzen:

Die Unterordner von z.B. "C:\Daten\Projekte\123456_Huber\Aufgaben\Allgemein" werden nicht mit kopiert, nur die Dateien. Sicher nur eine Kleinigkeit.

Nächste Aufgabe wäre dann noch das Löschen der Quelle, also jeweils der Ordner "Allgemein". Perfekt wäre es, wenn vorher geprüft wird, ob am neuen Ziel auch alles angekommen ist

Vorab besten Dank
Gary
Bitte warten ..
Mitglied: SaschaRD
04.04.2014, aktualisiert um 09:16 Uhr
Morgen Gary,
01.
set quelle="c:\daten\projekte" 
02.
set ziel="d:\daten\archiv" 
03.
 
04.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\%%i 
05.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do xcopy /S /E %quelle%\%%i\aufgaben\allgemein\*.* %ziel%\%%i\*.*
Dann muss xcopy verwendet werden.
Dazu öffnest Du am besten die Windows CLI und machst xcopy /? Dann erhälst Du die Befehlsmöglichkeiten.

/S = Kopiert Verzeichnisse und Unterverzeichnisse, die nicht leer sind.
/E = Kopiert alle Unterverzeichnisse (leer oder nicht leer).

Gruß, Sascha
Bitte warten ..
Mitglied: Xaero1982
04.04.2014, aktualisiert um 09:26 Uhr
Er wird so ein Problem bekommen wenn Ordner ein Leerzeichen haben: (Man achte auf die "")

01.
set quelle="c:\daten\projekte" 
02.
set ziel="d:\daten\archiv" 
03.
 
04.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\"%%i" 
05.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do xcopy %quelle%\"%%i\aufgaben\allgemein\*.*" %ziel%\"%%i"\ /E /Y /H
/H kopiert noch versteckte Dateien oder Systemdateien.
ob /E oder /S musst du entscheiden. /E kopiert auch leere Ordner

Den Vergleich überlass ich jemand anderes

Gruß
Bitte warten ..
Mitglied: 1garym
04.04.2014 um 09:27 Uhr
Perfekt! Funktioniert wunderbar Jetzt noch die Daten der Quelle löschen, also jeweils der Ordner "Allgemein". Perfekt wäre es, wenn vorher geprüft wird, ob am neuen Ziel auch alles angekommen ist

Vielen vielen Dank !
Gary
Bitte warten ..
Mitglied: SaschaRD
04.04.2014 um 11:24 Uhr
Hallo Gary,

das mit der Prüfung wird komplexer. Heißt ein Dateivergleich oder gleich zu Robocopy wechseln =)
Hier ein Link in dem Robocopy erklärt ist.

Ein weiterer Link aus dem Forum Administrator.de

Gruß, Sascha
Bitte warten ..
Mitglied: Xaero1982
04.04.2014, aktualisiert um 15:28 Uhr
EDIT: Korrektur um 15:25 Getestet auf Server 2008
So,

nicht schön, aber selten:

01.
@echo off 
02.
set quelle="c:\daten\projekte" 
03.
set ziel="d:\daten\archiv" 
04.
set tmpfile=%temp%\test.txt 
05.
 
06.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do md %ziel%\"%%i"  
07.
if exist %tmpfile% (del %tmpfile%) 
08.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do echo %%i >>%tmpfile% 
09.
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do xcopy %quelle%\"%% 
10.
 
11.
i\aufgaben\allgemein\*.*" %ziel%\"%%i"\ /E /Y /H 
12.
 
13.
set /A qdateien=0 
14.
set /A qordner=0 
15.
for /f %%d in (%tmpfile%) do ( 
16.
for /F %%i in ('dir %quelle%\%%d\aufgaben\allgemein /s /a /B /A-d') do set /A qdateien=qdateien+1 
17.
for /F %%i in ('dir %quelle%\%%d\aufgaben\allgemein /s /a /B /Ad') do set /A qordner=qordner+1 
18.
19.
echo Im Ordner %quelle% befinden sich: %qdateien% Dateien und %qordner% Ordner 
20.
 
21.
set /A zdateien=0 
22.
set /A zordner=0 
23.
for /f %%d in (%tmpfile%) do ( 
24.
for /F "delims=\ tokens=1*" %%i in ('dir %ziel%\%%d /s /a /B /A-d') do set /A zdateien=zdateien+1 
25.
for /F "delims=\ tokens=1*" %%i in ('dir %ziel%\%%d /s /a /B /Ad') do set /A zordner=zordner+1 
26.
27.
echo Im Ordner %ziel% befinden sich: %zdateien% Dateien und %zordner% Ordner 
28.
 
29.
IF %qdateien% == %zdateien% (echo Dateianzahl stimmt! ) ELSE (GOTO FError) 
30.
if %qordner% == %zordner% (echo Ordnerzahl stimmt! Goto kopieren) ELSE (GOTO OError) 
31.
 
32.
:kopieren 
33.
for /f %%d in (test.txt) do ( echo /s /q %quelle%\"%%d\aufgaben\allgemein" ) 
34.
GOTO EOF 
35.
 
36.
:FError 
37.
echo ACHTUNG: Dateianzahl stimmt nicht ueberein! 
38.
GOTO EOF 
39.
 
40.
:OError 
41.
echo ACHTUNG: Ordneranzahl stimmt nicht ueberein! 
42.
GOTO EOF 
43.
 
44.
:EOF 
45.
del %tmpfile%
Es gibt hier ein paar Fallstricke.

1. Er überprüft natürlich keine Dateigrößen/Fehlerfreiheit der Dateien
2. Du musst aus dem echo in (Zeile 33)
01.
for /f %%d in (test.txt) do ( echo /s /q %quelle%\%%d\aufgaben\allgemein )
ein rd machen, damit die Dateien gelöscht werden inkl. des Ordners allgemein.
3. Du brauchst Schreibrechte an dem Ort an dem die Batch liegt, weil dort eine temporäre Datei erstellt wird. Edit: Dank des Einwands von Bastla obsolet - Tempdatei wird im Ordner %temp% temporär angelegt.

Gruß
PS: Verwendung auf eigene Gefahr
Bitte warten ..
Mitglied: 1garym
04.04.2014 um 13:30 Uhr
Super, ich werde es vorab ausgiebig testen, damit da nix verloren geht Herzlichen Dank an Euch alle und ein schönes Wochende

Gary
Bitte warten ..
Mitglied: Xaero1982
04.04.2014 um 13:31 Uhr
Korrektur siehe oben!
Bitte warten ..
Mitglied: bastla
04.04.2014 um 15:22 Uhr
@ Xaero1982
Du brauchst Schreibrechte an dem Ort an dem die Batch liegt, weil dort eine temporäre Datei erstellt wird.
Im %TEMP%-Ordner hat der User eigentlich immer Schreibrechte ...

Grüße
bastla
Bitte warten ..
Mitglied: Xaero1982
04.04.2014 um 15:23 Uhr
Stimmt ... kann ich noch anpassen - guter Einwand

Gruß
Bitte warten ..
Mitglied: mayho33
14.04.2014 um 16:35 Uhr
Hi!

Warum verwendest du nicht USMT?

Vorteil: Wiederverwendbarkeit, unendlich viele Möglichkeiten was wie und wann gesichert wird, unscharfe suche mit Patterns, Verschieben beim Wiederherstellen in andere Ordner, usw.

eventueller Nachteil: Man muss sich in das Thema einarbeiten

lg

mayho
Bitte warten ..
Mitglied: Xaero1982
14.04.2014 um 18:15 Uhr
Zitat von mayho33:

Hi!

Warum verwendest du nicht USMT?

Vorteil: Wiederverwendbarkeit, unendlich viele Möglichkeiten was wie und wann gesichert wird, unscharfe suche mit Patterns,
Verschieben beim Wiederherstellen in andere Ordner, usw.

eventueller Nachteil: Man muss sich in das Thema einarbeiten

lg

mayho

Was genau hat USMT damit zu tun?
https://www.google.com/search?client=opera&q=USMT&sourceid=opera ...

Sagt mir es wird für die Nutzermigration benutzt. Darum geht es hier aber nicht.

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...