olli1989
Goto Top

Batch Datei für Ordner Inhalt auf anderen Ordner verteilen

Hallo an alle,

ich bräuchte eure Hilfe.

Ich brauch eine Batch Datei die folgendes tut.

Ordner mit dem Namen "xy" in einem Verzeichnis sucht (D:\Daten), wenn er sie gefunden hat löscht und einen neuen Ordner der an einem Quellpfad liegt einfügt. Dabei sollte der Quellordner natürlich nicht gelöscht werden.

Bsp.
Auf Laufwerk D:\Daten\Vorlage\config (Quelleverzeichnis)
Ziel(1) D:\Daten\Test1
Ziel (2) D:\Daten\Test1

Somit kann ich den Ordner config einmal aktualisieren und durch die Batch Datei die anderen 124 Ordner synchronisieren.

Vielen Dank

Gruß Olli

Content-ID: 195055

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

bastla
bastla 28.11.2012 um 19:56:05 Uhr
Goto Top
Hallo Olli1989!

Wenn Du jetzt, mit einigem zeitlichen Abstand, Deine Problembeschreibung nochmals liest, wird Dir vielleicht auffallen, dass sie hinsichtlich der Verständlichkeit noch Potenzial hat ... face-wink

Grüße
bastla
Olli1989
Olli1989 28.11.2012 um 20:12:25 Uhr
Goto Top
Hey Bastla,

ja da muss ich dir recht geben. Ich versuche es nochmal face-smile
Ich benötige eine Batch Datei die folgendes tut.
Ein Netzlaufwerk nach Ordnern (xy) durchsucht und wenn er diese Ordner gefunden hat durch einen Ordner ersetzt welcher in einem Quellverzeichnis liegt.
Problem ist beim ersetzen muss er den Ordner der als Quellverzeichnis dient nicht verändern.

Ist die Erklärung nun besser face-smile

Viele Grüße
bastla
bastla 28.11.2012 aktualisiert um 20:42:48 Uhr
Goto Top
Hallo Olli1989!

Wenn Du jetzt noch konkretisierst, was unter "Ersetzen" zu verstehen ist (etwa: Name des Ordners soll gleich bleiben, Inhalt soll durch den Inhalt des Quellordners ersetzt werden, Ordner darf dazu gelöscht und neu erstellt werden) und klar stellst, wie die Zielordner gefunden werden sollen (Liste | alle Unterordner eines bestehenden Ordners | bestimmte Unterordner eines bestehenden Ordners, die anhand eines Namensbestandteiles identifiziert werden können) und ob der Inhalt des Quellordners in jeden dieser Ordner übertragen werden sollen, wird's vermutlich ganz gut ... face-smile

Grüße
bastla
Olli1989
Olli1989 28.11.2012 um 20:43:33 Uhr
Goto Top
Der Name des Ordners soll gleich bleiben und der Inhalt soll durch den Inhalt des Quellordners ersetzt werden. Es sollen auf dem Laufwerk D: zwei Ordner (Software1,Software2) inklusive Unterordner durchsucht werden ob der Ordner "xy"vorhanden ist, wenn ja soll dieser gelöscht werden und der Ordner mit dem gleichen Namen "xy" aus dem Quellverzeichnis eingefügt werden.

Das Quellverzeichnis liegt aber auch auf dem Laufwerk D: also müsste man in der Batch Datei diesen Pfad ausnehmen, da er sonst den Quellordner auch löscht.

Ordnerstruktur

D:/Software1
D:/Software1/Vorlage/xy ------> Quellverzeichnis
D:/Software1/User1/xy -------> zu ersetzender Ordner

D:/Software2
D:/Software2/Ordner1/xy -------> zu ersetzender Ordner
D;/Software

Ich hoffe es kommt Licht ins dunkle face-smile
bastla
bastla 28.11.2012 aktualisiert um 21:06:06 Uhr
Goto Top
Hallo Olli1989!

Dann vielleicht so:
@echo off & setlocal
set "QuellPfad=D:\Software1\Vorlage"  
set "Ordner=xy"  
set Zielpfade="D:\Software1","D:\Software2"  

for %%i in (%Zielpfade%) do (
    for /f "delims=" %%a in ('dir /s/b/ad "%%~i\%Ordner%" 2^>nul^|findstr /ivc:"%Quellpfad%"') do (  
        echo rd /s /q "%%a"  
        echo xcopy /e "%QuellPfad%\%Ordner%" "%%a\"  
    )
)
pause
Zum gefahrlosen Testen sind die Zeilen 8 und 9 durch das vorangestellte "echo" entschäft - es werden so die jeweiligen Befehle für das Löschen des vorhandenen Ordners (samt Unterordner) und Kopieren des Quellordners nur angezeigt. Wenn das Ergebnis vernünftig aussieht, diese beiden "echo" entfernen ...

Hinweise: Es werden hier sämtliche Ordner "xy" unterhalb des jeweiligen Zielordners gesucht, nicht nur jene in der 3. Ordnerebene, und es werden die vorhandenen Ordner inkl Unterordner zunächst komplett gelöscht.

Grüße
bastla
Olli1989
Olli1989 28.11.2012 um 21:09:43 Uhr
Goto Top
Super face-smile Ich werde es morgen gleich testen face-smile
Vielen Dank Bastla für die super Hilfe ich melde mich morgen mit
Ergebnissen face-smile

Schönen Abend noch face-smile
Olli1989
Olli1989 29.11.2012 um 16:00:06 Uhr
Goto Top
Hallo Bastla,

ich habe es jetzt getestet und es funktioniert soweit bis auf einen kleinen Fehler.
Er durchsucht die Zielpfade und ersetzt auch den Ordner "PublishSkripte" leider legt er aber den die Inhalte des Ordners "PublishSkripte" auch ausserhalb des Ordners ab. Wieso?
Er soll eigentlich nur den vorhanden Ordner "PublishSkripte" löschen und den Ordner "PublishSkripte" aus dem Quellverzeichnis einfügen. Hast du eine Idee?

Hier der Inhalt der Datei.

@echo off & setlocal
set "QuellPfad=W:\Daten\Vorlagen\PublishSkripte"
set "Ordner=PublishSkripte"
set Zielpfade=W:\Daten\Rehadat-Elan","W:\Daten\Snapform

for %%i in (%W:\Daten\Rehadat-Elan%) do (
for /f "delims=" %%a in ('dir /s/b/ad "%%~i\%PublishSkripte%" 2^>nul^|findstr /ivc:"%W:\Daten\Vorlagen\PublishSkripte%"') do (
rd /s /q "%%a"
xcopy /e "%W:\Daten\Vorlagen\PublishSkripte" "%%a\"
)
)
pause
bastla
bastla 29.11.2012 aktualisiert um 21:08:35 Uhr
Goto Top
Hallo Olli1989!

Wenn der Quellordner nicht "W:\Daten\Vorlagen\PublishSkripte\PublishSkripte" ist, müsstest Du den Quellpfad (in Zeile 2) anpassen ...

Grüße
bastla

P.S.: "Code"-Formatierung macht einen Batch besser lesbar (und lässt sich auch leicht nachträglich hinzufügen face-wink) ...
Olli1989
Olli1989 05.12.2012 um 08:40:21 Uhr
Goto Top
Der Quellordner ist richtig. Nur leider kopiert er die Dateeien in diesem Quellordner in alle Unterordnerstrukturen. face-sad
bastla
bastla 05.12.2012 um 20:41:48 Uhr
Goto Top
Hallo Olli1989!

Versuch es mal damit
echo off & setlocal
set "QuellPfad=W:\Daten\Vorlagen"  
set "Ordner=PublishSkripte"  
set Zielpfade="W:\Daten\Rehadat-Elan","W:\Daten\Snapform"  

for %%i in (%Zielpfade%) do (
    for /f "delims=" %%a in ('dir /s/b/ad "%%~i\%Ordner%" 2^>nul^|findstr /ivc:"%Quellpfad%\%Ordner%"') do (  
        rd /s /q "%%a"  
        xcopy /e "%Quellpfad%\%Ordner%" "%%a\"  
    )
)
pause
Variablen sind übrigens u.a. dazu da, verwendet zu werden - anderenfalls sind auch die Prozentzeichen unnötig ...

Grüße
bastla