Zeichenfolge in Textdatei durch Inhalt einer Umgebungsvariable ersetzen
Hallo zusammen,
wie kann ich mittels Batch in einer Textdatei die Zeichenfolge #### durch den Inhalt der Umgebungsvariable %username% ersetzen?
Danke im Voraus,
Sarek \\//_
wie kann ich mittels Batch in einer Textdatei die Zeichenfolge #### durch den Inhalt der Umgebungsvariable %username% ersetzen?
Danke im Voraus,
Sarek \\//_
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 277410
Url: https://administrator.de/forum/zeichenfolge-in-textdatei-durch-inhalt-einer-umgebungsvariable-ersetzen-277410.html
Ausgedruckt am: 15.04.2025 um 08:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo Sarek,
Batch ist da keine gute Idee, aber da du schon fragst ...
Grüße
rubberman
Batch ist da keine gute Idee, aber da du schon fragst ...
- Datei zeilenweise einlesen (FOR /F)
- Zeileninhalt einer Variablen zuweisen
- Verzögerte Variablenerweiterung einschalten
- Textersetzung, á la
set "var=!var:####=%username%!"
durchführen - Variableninhalt per ECHO-Umleitung in eine andere Datei schreiben
- Verzögerte Variablenerweiterung ausschalten
- ggf. alte durch neue Datei per MOVE /Y ersetzen
Grüße
rubberman
Hallo Sarek.
In dieser einfachen Version verschwinden evtl. vorkommende Leerzeilen allerdings spurlos.
Grüße
rubberman
Warum nicht?
Weil Textersetzung in Batch ein unsicheres Unterfangen ist. Du kannst nicht jedes beliebige Zeichen ersetzen, es gibt Ausnahmen.Tja, weiter bin ich nun immer noch nicht ...
Ach so, du möchtest den Code komplett vorgekaut bekommen. Ungetestet in den Browser geschrieben ...1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
@echo off &setlocal DisableDelayedExpansion
>"test2.txt" (
for /f usebackq^ delims^=^ eol^= %%i in ("test1.txt") do (
set "line=%%i"
setlocal EnableDelayedExpansion
echo(!line:####=%username%!
endlocal
)
)
move /y "test2.txt" "test1.txt"
Grüße
rubberman
die Zieldatei ist leer (0 Bytes Länge)
Für den Fall, dass du den Code nicht verstanden hast: Die Quell- und Zieldatei ist "test1.txt". Die Datei "test2.txt" ist temporär und verschwindet wieder. Sollte es trotzdem nicht funktionieren, liegt deine Datei nicht im ANSI Zeichensatz vor (denn mittlerweile habe ich die Funktionstüchtigkeit des Codes geprüft).Grüße
rubberman
Mir fiel auf, dass eine Klammer mehr geöffnet als wieder geschlossen wird ...
Das ist Absicht. Sie folgt direkt auf ECHO (ohne Leerzeichen dazwischen) und ist die bessere Alternative zu einem Punkt, der sonst häufig an dieser Stelle zu finden ist. (Nur zur Erklärung...)Du kannst testweise Zeile 3 wie folgt ändern, um dir die Konvertierung der Datei zu ersparen (kommt darauf an in welchem Zeichensatz sie vorliegt):
for /f delims^=^ eol^= %%i in ('type "test1.txt"') do (
Grüße
rubberman