Per Batch bzw. Skript Inhalte von Ordnern in andere Ordner mit gleichem Namen verschieben
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 234461
Url: https://administrator.de/forum/per-batch-bzw-skript-inhalte-von-ordnern-in-andere-ordner-mit-gleichem-namen-verschieben-234461.html
Ausgedruckt am: 17.02.2025 um 01:02 Uhr
17 Kommentare
Neuester Kommentar
Moin,
nur zum Verständnis:
Du willst Daten aus dem Ordner:
nach
verschieben oder nach:
?
So richtig klar find ich das nicht.
Dann tuts doch ein simpler Copy-Befehl:
Gruß
nur zum Verständnis:
Du willst Daten aus dem Ordner:
C:\Daten\Projekte\123456_Projektname\Aufgaben\Allgemein
d:\Daten_der_Ordner_des_Projekts_(123456_Projektname)
verschieben oder nach:
d:\123456_Projektname
?
So richtig klar find ich das nicht.
Dann tuts doch ein simpler Copy-Befehl:
copy c:\daten\projekte\*.* d:\*.*
Gruß
Evtl. geht es ja so...
Edit: Da du es ja verschieben willst kannst du dann mit:
die Ordner löschen - ACHTUNG bei diesem Kommando erfolgt dann keine Nachfrage (/q)
Gruß
ps: irgendwer bekommt das sicher als Einzeiler hin![face-smile face-smile](/images/icons/fa/light/face-smile.svg)
@echo off
for /f "delims=\ tokens=1*" %%i in ('dir "c:\daten\projekte\" /b /ad') do md "d:\daten\archiv\%%i"
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\*.*"
Edit: Da du es ja verschieben willst kannst du dann mit:
rd /s /q c:\daten\projekte\
Gruß
ps: irgendwer bekommt das sicher als Einzeiler hin
Sieht gut aus @xaero
Kleiner Zusatz: falls jemand mit Variablen arbeiten möchte s.u.
Gruß, Sascha
Kleiner Zusatz: falls jemand mit Variablen arbeiten möchte s.u.
set quelle="c:\daten\projekte"
set ziel="d:\daten\archiv"
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\%%i
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do copy %quelle%\%%i\aufgaben\allgemein\*.* %ziel%\%%i\*.*
Morgen Gary,
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
set quelle="c:\daten\projekte"
set ziel="d:\daten\archiv"
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\%%i
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
Er wird so ein Problem bekommen wenn Ordner ein Leerzeichen haben: (Man achte auf die "")
/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![face-smile face-smile](/images/icons/fa/light/face-smile.svg)
Gruß
set quelle="c:\daten\projekte"
set ziel="d:\daten\archiv"
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /ad') do md %ziel%\"%%i"
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ß
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
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
EDIT: Korrektur um 15:25 Getestet auf Server 2008
So,
nicht schön, aber selten:
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) 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![face-smile face-smile](/images/icons/fa/light/face-smile.svg)
So,
nicht schön, aber selten:
@echo off
set quelle="c:\daten\projekte"
set ziel="d:\daten\archiv"
set tmpfile=%temp%\test.txt
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do md %ziel%\"%%i"
if exist %tmpfile% (del %tmpfile%)
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do echo %%i >>%tmpfile%
for /f "delims=\ tokens=1*" %%i in ('dir %quelle% /b /a /ad') do xcopy %quelle%\"%%
i\aufgaben\allgemein\*.*" %ziel%\"%%i"\ /E /Y /H
set /A qdateien=0
set /A qordner=0
for /f %%d in (%tmpfile%) do (
for /F %%i in ('dir %quelle%\%%d\aufgaben\allgemein /s /a /B /A-d') do set /A qdateien=qdateien+1
for /F %%i in ('dir %quelle%\%%d\aufgaben\allgemein /s /a /B /Ad') do set /A qordner=qordner+1
)
echo Im Ordner %quelle% befinden sich: %qdateien% Dateien und %qordner% Ordner
set /A zdateien=0
set /A zordner=0
for /f %%d in (%tmpfile%) do (
for /F "delims=\ tokens=1*" %%i in ('dir %ziel%\%%d /s /a /B /A-d') do set /A zdateien=zdateien+1
for /F "delims=\ tokens=1*" %%i in ('dir %ziel%\%%d /s /a /B /Ad') do set /A zordner=zordner+1
)
echo Im Ordner %ziel% befinden sich: %zdateien% Dateien und %zordner% Ordner
IF %qdateien% == %zdateien% (echo Dateianzahl stimmt! ) ELSE (GOTO FError)
if %qordner% == %zordner% (echo Ordnerzahl stimmt! Goto kopieren) ELSE (GOTO OError)
:kopieren
for /f %%d in (test.txt) do ( echo /s /q %quelle%\"%%d\aufgaben\allgemein" )
GOTO EOF
:FError
echo ACHTUNG: Dateianzahl stimmt nicht ueberein!
GOTO EOF
:OError
echo ACHTUNG: Ordneranzahl stimmt nicht ueberein!
GOTO EOF
:EOF
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)
for /f %%d in (test.txt) do ( echo /s /q %quelle%\%%d\aufgaben\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
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
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ß