rebell09
Goto Top

Files durch eine Batch ersetzen

Grundlage:

Ich habe einen Ordner in den sich mehrer unterordner befinden.
In jedem dieser Ordner befindet sich eine datei.
Diese ist in jedem Ordner identisch und trägt auch den gleichen Namen.

Vorhaben:
Nun muss diese eine Datei neu bearbeitet werden.
Ich habe sie also (temporär) auf dem Desktop gespeichert und entsprechend editiert.
(Leider) müssen alle anderen Datein auch aktualisiert werden.
Die Möglichkeit alle Manuell zu kopieren wäre eine Altanative, aber sehr mühselig, da es sich um wirklich einige Unterordner handelt (ü100).

Nun meine Idee:

Ich würde gern eine Batch schreiben, die den Inhalt des Ordners ausliest (auch der Unterordner da es dort auch wieder Unterordner gibt)
und in jeden Ordner die modifizierte Datei kopiert und die alte dementsprechend ersetz.

Der Befehl zum kopieren ist ja "xcopy".

Nun die Frage:

Geht dieses auslesen und kann ich den xcopy-befehl so schreiben, das er die Datei auch in die Unterordner kopiert und ersetz?


Info:

Damit keine fehler durch Pfade entstehen können, habe ich mir eine Speicherung auf meiner Festplatte angelegt.
Die Datei befindet sich nun auf "C:\"
Der Order mit den Unterordnern befindet sich auch auf "C:\"
Ich habe ihn mal Batch gennant ;).

So muss also die Datei von "C:\" in den Ordner und alle Unterordner von "C:\Batch\" kopiert werden.

Hoffe mir kann jemand helfen und vielen Dank schonmal im vorraus.

Content-Key: 117334

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: mexx
mexx Jun 03, 2009 at 04:11:00 (UTC)
Goto Top
Ich empfehle Dir dringend, Dich von den Gedanken das mit Batch zu machen zu entfernen. Die Zukunft der Windows Commando Ebene heißt Powershell. Per Powershell wären das vielleicht max. 10 Zeilen.

1. Rekursive Suche aller Dateien und/oder Unterordner (ein Befehl)
2. Per For-Schleife alle Dateien in den gefundenen Ordnern und Unterordnern ersetzten

Okay, sind 5 Zeilen. Wenn Du Powershell einsetzten willst, helfe ich Dir gerne beim coden.
Member: Biber
Biber Jun 03, 2009 at 07:22:39 (UTC)
Goto Top
Moin ReBeLL09,

willkommen im Forum.
Bei allem Verständnis für pubertäre ReBeLLion:
Wir reden uns hier im Forum mit "Hallo", "Moin" oder "Tach" an und nicht mit "Grundlage".
Und auf "vielen Dank schonmal im vorraus" verzichten wir gerne zugunsten einer Rückmeldung "Hat geklappt" bzw. "hat nichts gebracht".

Zurück zu Deiner Frage.
Wie mexx schon bemerkte, ist die Lösung dieser Aufgabe mit CMD-Mitteln etwas behäbiger und uneleganter.
Deshalb auch nur eine kurze Skizze der Vollständigkeit halber (aus Nostalgiegründen sozusagen)

Dei folgendem Testszenario (Datei Test37.txt ist in einigen von vielen Unterverzeichnissen unterhalb D:\Temp und die "neue" Datei "test37.txt ist auf meinem Desktop)
dir test37.* /b /s
:\temp\test37.txt
:\temp\templogs\test37.txt
:\temp\test\test37.txt
:\temp\test22\test37.txt
:\temp\testheute\test37.txt
macht das gewünschte folgende Zeile am CMD-Prompt:
for /r "d:\temp" %i in (test37.txt) do @if exist "%i" copy "%userprofile%\desktop\test37.txt" "%~fi"  

Falls in ALLEN Unterverzeicnissen diese Datei platziert werden soll (auch wenn noch keine vorher existierte), dann das "If exist "%i" einsparen.

Grüße
Biber
Mitglied: 77559
77559 Jun 03, 2009 at 08:04:37 (UTC)
Goto Top
Zitat von @Biber:
Zurück zu Deiner Frage.
Wie mexx schon bemerkte, ist die Lösung dieser Aufgabe mit CMD-Mitteln etwas behäbiger und uneleganter.

Sorry,
da kann ich nicht folgen,

für genau diesen Fall gibts es schon seit Urzeiten den Befehl Replace,
und bevor ich einen Fünfzeiler in einer objektorientierten Scriptsprache schreibe,
nehme ich doch lieber einen einzigen Befehl.

Es gibt mit Sicherheit Felder in denen PowerShell glänzen kann - hier nicht.

Replace C:\Datei C:\Batch\ /S

Gruß
LotPings
Member: ReBeLL09
ReBeLL09 Jun 04, 2009 at 11:27:43 (UTC)
Goto Top
Zitat von @77559:

Replace C:\Datei C:\Batch\ /S

Gruß
LotPings

kann ich mit diesem Befehl die Datei in alle Unterordner kopieren?
würde das gern erst wissen ;)

@ Biber
sry wollte nicht protzig oder so wirken ;)
kenne nur von anderen Forums, das wenn man es so gegliedert schreibt, die verständniss besser ist ;)

Zugegeben, das Hallo, Moin, Tach, Sers, Aloa oder wie auch immer, habe ich irgendwie verschluckt ;) *schande auf mein haupt*
Mitglied: 77559
77559 Jun 04, 2009 at 12:08:08 (UTC)
Goto Top
Hallo Rebell09,
(so heisst übrigens auch das Computer-Gehäuse meines Sohnes)
ich hasse diese "Sichergeher"

Du hast zwei Möglichkeiten, entweder du glaubst mir, (ob nun beim ersten oder zweiten Mal)
oder du probierst/prüfst es nach, ggfs. mit Testdaten.

Die Hilfe des Befehls steht jedem offen, einfach in einem CMD Fenster

Replace /?

eingeben.

Gruß
LotPings
Member: Biber
Biber Jun 04, 2009 at 17:45:35 (UTC)
Goto Top
Moin ReBeLL09,

*schande auf mein haupt*
Okay, kannst Du wieder abwaschen... face-wink

Grundsätzlich hat der Lord natürlich Recht mit den zwei Möglichkeiten, aber weil es hier wirklich unterschiedliche Ergebnisse gibt...

  • die erste meiner FOR/R-Varianten (die mit "IF EXIST") würde 5 Dateien finden und übernageln
  • die zweite Variante ohne IF EXIST würde in knapp 70 Unterverzeichnissen unterhalb des Startverzeichnisses d:\temp eine Kopie abladen
  • Lords Weg mit Replace.exe ersetzt maximal die 5 schon vorhandenen Dateien (optional davon nur die, die älter sind als die neue)
>replace "%userprofile%\desktop\test37.txt" D:\temp /s  
Ersetzen von D:\temp\test37.txt
Ersetzen von D:\temp\templogs\test37.txt
Ersetzen von D:\temp\test\test37.txt
Ersetzen von D:\temp\test22\test37.txt
Ersetzen von D:\temp\testheute\test37.txt
5 Datei(en) ersetzt
---> aber Replace.exe bietet keine Möglichkeit, in ALLE Unterverzeichnisse (egal ob Datei vorhanden oder nicht) eine Kopie zu senden.

Wenn die Frage dann hinreichend beantwortet ist Deiner Meinung nach, bitte auf "erledigt" setzen.

Grüße
Biber

P.S. @77559
(so heisst übrigens auch das Computer-Gehäuse meines Sohnes)
Dein Sohn gibt seinem Computer Namen??? Na ja...
Meine Töchter haben ihren Plüschtierchen auch Namen gegeben, aber eher sowas wie Fluffi oder Lisa...
Aber ReBeLL09 ist auch eine hübsche Idee...
Mitglied: 77559
77559 Jun 04, 2009 at 17:58:42 (UTC)
Goto Top
Zitat von @Biber:
P.S. @77559
> (so heisst übrigens auch das Computer-Gehäuse meines Sohnes)
Dein Sohn gibt seinem Computer Namen??? Na ja...
Nö, das hieß auch vorher schon so.
Rebel

Meine Töchter haben ihren Plüschtierchen auch Namen gegeben, aber eher sowas wie Fluffi oder Lisa...
Aber ReBeLL09 ist auch eine hübsche Idee...

Haha Oface-smile