
61293
12.02.2008, aktualisiert am 14.02.2008
Batch zur Ermittlung von Programmpfad, Umbenennen und Ergänzen von Dateien
Hallo Batch-Profis.
Ich habe mehrere Programme, die für interne Feldzuordnungen versteckte ini-Files in den Programmordnern verwenden. Diese Files müssen aufgrund von Programmerweiterungen von Zeit zu Zeit upgedated werden. Es gibt zwei Standardfiles, die den Programmanwendern als Grundlage dienen:
1. .ini
2. standard.ini
Diese beiden files dürfen nicht verändert werden. Alle anderen schon.
Da ich weder den Programmordner kenne, in dem das jeweilige Programm installiert ist, noch die Anzahl der weiteren ini-Dateien, die in der Folge vom Anwender selbst durch die Nutzung der Programme erstellt werden, muss das Batch-file in der lage sein den Ordner (aus der Registry) auszulesen und alle .ini's - außer den oben genannten - zu durchlaufen, zu öffnen und gemäß den aktuellen Bedingungen anzupassen.
Folgendes soll die Batch-Datei demnach tun:
1. Den Programmordner in dem das Programm installiert ist auslesen
2. Die beiden Standardfiles umbenennen in *.txt, damit diese nicht verändert werden
3. die restlichen .ini-Dateien in einer Schleife suchen, durchlaufen und jeweils am Ende der Datei einen String ergänzen.
4. Die beiden standardfiles wieder in *.ini umbenennen
Ich bin blutiger Anfänger was Batch-Dateien angeht, glaube aber daß das das richtige Medium ist um wiederkehrende, automatisierte Abläufe durchzuführen.
Vielen Dank für Eure Unterstützung.
Gruß,
sky
Ich habe mehrere Programme, die für interne Feldzuordnungen versteckte ini-Files in den Programmordnern verwenden. Diese Files müssen aufgrund von Programmerweiterungen von Zeit zu Zeit upgedated werden. Es gibt zwei Standardfiles, die den Programmanwendern als Grundlage dienen:
1. .ini
2. standard.ini
Diese beiden files dürfen nicht verändert werden. Alle anderen schon.
Da ich weder den Programmordner kenne, in dem das jeweilige Programm installiert ist, noch die Anzahl der weiteren ini-Dateien, die in der Folge vom Anwender selbst durch die Nutzung der Programme erstellt werden, muss das Batch-file in der lage sein den Ordner (aus der Registry) auszulesen und alle .ini's - außer den oben genannten - zu durchlaufen, zu öffnen und gemäß den aktuellen Bedingungen anzupassen.
Folgendes soll die Batch-Datei demnach tun:
1. Den Programmordner in dem das Programm installiert ist auslesen
2. Die beiden Standardfiles umbenennen in *.txt, damit diese nicht verändert werden
3. die restlichen .ini-Dateien in einer Schleife suchen, durchlaufen und jeweils am Ende der Datei einen String ergänzen.
4. Die beiden standardfiles wieder in *.ini umbenennen
Ich bin blutiger Anfänger was Batch-Dateien angeht, glaube aber daß das das richtige Medium ist um wiederkehrende, automatisierte Abläufe durchzuführen.
Vielen Dank für Eure Unterstützung.
Gruß,
sky
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80578
Url: https://administrator.de/forum/batch-zur-ermittlung-von-programmpfad-umbenennen-und-ergaenzen-von-dateien-80578.html
Ausgedruckt am: 01.05.2025 um 04:05 Uhr
14 Kommentare
Neuester Kommentar
Hallo skyball und willkommen im Forum!
Zur Umsetzung Deines an sich gut beschriebenen Ablaufes fehlt für 1. noch die Angabe des entsprechenden Reg-Keys/-Values - falls Du es selbst versuchen willst: "reg query /?" (falls das BS zumindest XP ist) sollte helfen ...
Sobald der Pfad bekannt ist (ich ersetze für die Demo das Auslesen durch einen konstanten Eintrag), ginge der Rest etwa so:
Da ".txt" eine doch eher gängige Erweiterung ist (und somit die Gefahr einer ev Kollision mit einer gleichnamigen Datei beim Umbenennen etwas höher wäre), habe ich für die temporäre Namensänderung den Typ ".-T-" gewählt.
"... am Ende der Datei einen String ergänzen" habe ich so interpretiert, dass der String als neue Zeile hinzugefügt werden soll - falls nicht, bitte das "Hinzufügen" genauer beschreiben ...
Grüße
bastla
Zur Umsetzung Deines an sich gut beschriebenen Ablaufes fehlt für 1. noch die Angabe des entsprechenden Reg-Keys/-Values - falls Du es selbst versuchen willst: "reg query /?" (falls das BS zumindest XP ist) sollte helfen ...
Sobald der Pfad bekannt ist (ich ersetze für die Demo das Auslesen durch einen konstanten Eintrag), ginge der Rest etwa so:
@echo off & setlocal
set "Zeile=Deine Ergänzungszeile"
set "ProgPfad=C:\Programme\DeinProg"
pushd "%ProgPfad%"
ren .ini .ini.-T-
ren standard.ini standard.ini.-T-
for %%i in (*.ini) do echo %Zeile%>>"%%i"
ren .ini.-T- .ini
ren standard.ini.-T- standard.ini
popd
"... am Ende der Datei einen String ergänzen" habe ich so interpretiert, dass der String als neue Zeile hinzugefügt werden soll - falls nicht, bitte das "Hinzufügen" genauer beschreiben ...
Grüße
bastla
Hallo skyball!
Zusätzlich kannst Du "Statusmeldungen" mit dem "echo"-Befehl erzeugen, also an geeigneter Stelle etwa ein "echo %Variable%", um den aktuellen Inhalt einer Variablen auszugeben, oder nur ein "echo Umbenennung erfolgt" etc.
Schließlich kannst Du auf das "echo off" zu Beginn des Batches verzichten (bzw es zu Testzwecken auf "echo on" abändern), um jeden Befehl vor der Ausführung anzeigen zu lassen. In diesem Zusammenhang hilfreich ist auch eine "Umleitung" der Ausgabe in eine Datei, indem Du den Batch so startest:
So kannst Du die Ausgaben dann in Ruhe nachlesen (allerdings landen auch alle von Dir selbst, etwa zur Benutzerinformation, erstellten Bildschirmausgaben oder die Aufforderung des "pause"-Befehles zum Drücken einer Taste in der Datei - Du musst ev Eingaben dann "blind" machen).
Zurück zu den versteckten .ini-Dateien: Mit "attrib" kannst Du diese zwar sichtbar machen bzw wieder verstecken:
allerdings genügt es auch, die Schleife etwas abzuändern:
Durch die Verwendung des "dir"-Befehles und die zusätzliche Angabe des Schalters "/a-d" werden alle Verzeichnisinhalte mit Ausnahme von Unterverzeichnissen berücksichtigt.
Grüße
bastla
Die zu bearbeitenden .Ini-Dateien sind versteckt
Woran es in diesem Fall liegt (wegen der Angabe mit Wildcards in der "for"-Schliefe werden diese nicht gefunden) ...Im Programmpfad ist ein Leerzeichen enthalten, z.B "ProgPfad=C:\Programme\Dein Prog"
Kein Problem, ist beim "pushd" durch die Anführungszeichen berücksichtigt.In der Ergänzungszeile sind Sonderzeichen, z.B "Zeile=Test;"
Nicht grundsätzlich auszuschließen, aber wohl nicht der Grund.Gibt es eigentlich eine Art von "Debugger" für Batch-Programme. Dann könnte man selbst sehen, wo es hängt.
Zum einen ist es sinnvoll, zunächst mit "Start / Ausführen... / CMD" eine Commandshell zu öffnen, da Du so besser Programmausgaben und Fehlermeldungen nachvollziehen kannst (bei Start über Doppelklick hilft zwar ein abschließendes "pause", um das sofortige Schließen des Fensters zu verhindern, aber der erste genannte Weg ist vorzuziehen).Zusätzlich kannst Du "Statusmeldungen" mit dem "echo"-Befehl erzeugen, also an geeigneter Stelle etwa ein "echo %Variable%", um den aktuellen Inhalt einer Variablen auszugeben, oder nur ein "echo Umbenennung erfolgt" etc.
Schließlich kannst Du auf das "echo off" zu Beginn des Batches verzichten (bzw es zu Testzwecken auf "echo on" abändern), um jeden Befehl vor der Ausführung anzeigen zu lassen. In diesem Zusammenhang hilfreich ist auch eine "Umleitung" der Ausgabe in eine Datei, indem Du den Batch so startest:
Batch.bat > Log.txt
Zurück zu den versteckten .ini-Dateien: Mit "attrib" kannst Du diese zwar sichtbar machen bzw wieder verstecken:
attrib -h *.ini
...
...
attrib +h *.ini
for /f "delims=" %%i in ('dir /b /a-d *.ini') do echo %Zeile%>>"%%i"
Grüße
bastla
Hallo skyball!
Der erste Ansatz wäre schon nicht schlecht, allerdings müsstest Du zum einen den Schalter "/v" verwenden, damit alle Dateien gefunden werden, welche die Zeile nicht enthalten, und zum anderen bist Du ja an den Dateinamen interessiert, daher noch "/m" - also in etwa:
Grüße
bastla
Der erste Ansatz wäre schon nicht schlecht, allerdings müsstest Du zum einen den Schalter "/v" verwenden, damit alle Dateien gefunden werden, welche die Zeile nicht enthalten, und zum anderen bist Du ja an den Dateinamen interessiert, daher noch "/m" - also in etwa:
for /f "delims=" %%i in ('findstr /v /m /c:"%Zeile%" *.ini') do echo %Zeile%>>"%%i"
Grüße
bastla
Hallo skyball!
Zur ersten Version: Die Idee war, alle Dateinamen auflisten zu lassen, in welchen %Zeile% nicht vorkommt - insoferne wäre die Prüfung erledigt und es könnte für jede gefundene Datei die Zeile hinzugefügt werden. Allerdings klappt das mit "/v" nicht wie geplant - die Erklärung dafür suche ich noch ...
Nur Dateien, welche %Zeile% enthalten, aufzulisten funktioniert allerdings mit
Diese Suche ließe sich dann auch noch verfeinern, indem mit "/b" und "/e" zusätzlich verlangt wird, dass sich der Suchbegriff an Beginn und Ende der Zeile befinden, und demzufolge eine ganze Zeile darstellen muss.
Grüße
bastla
Zur ersten Version: Die Idee war, alle Dateinamen auflisten zu lassen, in welchen %Zeile% nicht vorkommt - insoferne wäre die Prüfung erledigt und es könnte für jede gefundene Datei die Zeile hinzugefügt werden. Allerdings klappt das mit "/v" nicht wie geplant - die Erklärung dafür suche ich noch ...
Nur Dateien, welche %Zeile% enthalten, aufzulisten funktioniert allerdings mit
findstr /m /c:"%Zeile%" *.ini
Grüße
bastla
Hallo skyball!
Zum Thema Groß-/Kleinschreibung wäre der Schalter "/i" zu erwähnen; dass dies allerdings in diesem Fall ein Problem wäre, hatte ich nicht erwartet, da ich von der Annahme ausgegangen war, die relevante Zeile wäre erst durch den Batch eingefügt worden; dies hätte aber einen exakten Vergleich erlaubt.
Grüße
bastla
... liegt vielleicht daran, daß der Schalter /v zeilenbezogen, /m jedoch dateibezogen ist.
Das war auch meine erste Überlegung (und ausführlicher habe ich mich noch nicht damit befasst) ...Zum Thema Groß-/Kleinschreibung wäre der Schalter "/i" zu erwähnen; dass dies allerdings in diesem Fall ein Problem wäre, hatte ich nicht erwartet, da ich von der Annahme ausgegangen war, die relevante Zeile wäre erst durch den Batch eingefügt worden; dies hätte aber einen exakten Vergleich erlaubt.
Grüße
bastla