Substring durch Variableninhalt mit DOS-Script ersetzen
Benötige Hilfe beim Ersetzen eines Kennzeichens "<USERNAME>" innerhalb einer Variablen durch den Inhalt von %USERNAME%
Aaalso erstmal Hallo ;)
Ich habe eine Konfigurationsdatei in der Schlüssel-Wertpaare stehen unter Anderem folgendes:
WORKSPACE=D:\<USERNAME>\workspace
(ursprünglich hatte ich hier %USERNAME% zu stehen, aber das gibt beim Ersetzen nur noch mehr Probleme)
Diese Datei lese ich über folgende Mimik ein:
Jetzt möchte ich anstelle <USERNAME> den Inhalt der Umgebungsvariablen %USERNAME% setzen. Ich dachte mir ja sowas:
SET WORKSPACE=%WORKSPACE:<USERNAME>=%%USERNAME%% %
das Ergebnis dieser Zeile ist allerdings
D:\\workspacedocjunior
Was mache ich falsch und wie mache ich's richtig?
Aaalso erstmal Hallo ;)
Ich habe eine Konfigurationsdatei in der Schlüssel-Wertpaare stehen unter Anderem folgendes:
WORKSPACE=D:\<USERNAME>\workspace
(ursprünglich hatte ich hier %USERNAME% zu stehen, aber das gibt beim Ersetzen nur noch mehr Probleme)
Diese Datei lese ich über folgende Mimik ein:
FOR /F "eol=# tokens=1* delims== " %%a IN (meine.config) DO (
REM TODO: Variablen anerkennen
REM * Setzen der Debug Einstellungen
REM ************************************************************
if /I "%%a" == "DEBUG" (
REM sorge dafür, dass debug nur im Falle von true definiert ist
if /I "%%b" == "true" (
echo Setze Debugging auf TRUE
SET DEBUG=true
)
) else (
IF DEFINED DEBUG echo + Setze %%a=%%b
set %%a=%%b
)
)
Jetzt möchte ich anstelle <USERNAME> den Inhalt der Umgebungsvariablen %USERNAME% setzen. Ich dachte mir ja sowas:
SET WORKSPACE=%WORKSPACE:<USERNAME>=%%USERNAME%% %
das Ergebnis dieser Zeile ist allerdings
D:\\workspacedocjunior
Was mache ich falsch und wie mache ich's richtig?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132056
Url: https://administrator.de/forum/substring-durch-variableninhalt-mit-dos-script-ersetzen-132056.html
Ausgedruckt am: 23.04.2025 um 09:04 Uhr
3 Kommentare
Neuester Kommentar
Moin DocJunior,
willkommen im Forum.

Wenn du eine Variable als "Ersetze-durch" angeben willst, dann musst du explizit der cmd.exe signalisieren, dass du erst diese Variable auflösen willst und die andere (%Workspace% erst danach, verzögert (auf neudeutsch. delayed)
Die zuerst aufzulösende Variable wird dann als !var! statt %var% geschrieben.
Dazu dient der Setlocal-Feintuning-Wert "SetLocal EnableDelayedExpansion", den du
Demo an CMD-Prompt (das führende ">" nicht eingeben, ist mein Prompt)
Anmerkung I: ich habe den Dummy #username# statt <username> genannt, weil auch die Kleiner/Größer-Zeichen im Batch spezielle Bedeutung haben.
Anmerkung II: Was spicht denn dagegen, direkt in der Ini-Datei " WORKSPACE=D:\%USERNAME%\workspace" zu schreiben? Reicht doch auch...
Grüße
Biber
willkommen im Forum.
Was mache ich falsch und wie mache ich's richtig?
Bitte immer nur eine Frage pro Beitrag.. Wenn du eine Variable als "Ersetze-durch" angeben willst, dann musst du explizit der cmd.exe signalisieren, dass du erst diese Variable auflösen willst und die andere (%Workspace% erst danach, verzögert (auf neudeutsch. delayed)
Die zuerst aufzulösende Variable wird dann als !var! statt %var% geschrieben.
Dazu dient der Setlocal-Feintuning-Wert "SetLocal EnableDelayedExpansion", den du
- entweder in die erste Code-Zeile der Batchdatei schreibst "@echo off & Setlocal EnableDelayedExpansion"
- oder explizit "Setlocal EnableDelayedExpansion" als Zeile vor diese Ersetz-mir-in-der Workspace-Variablen und eine Zeile danach ein "EndLocal"
Demo an CMD-Prompt (das führende ">" nicht eingeben, ist mein Prompt)
>set WORKSPACE=D:\#USERNAME#\workspace
(=11:47:41 D:\temp=)
>echo %workspace:#username#=!username!%
D:\Biber\workspace
Anmerkung I: ich habe den Dummy #username# statt <username> genannt, weil auch die Kleiner/Größer-Zeichen im Batch spezielle Bedeutung haben.
Anmerkung II: Was spicht denn dagegen, direkt in der Ini-Datei " WORKSPACE=D:\%USERNAME%\workspace" zu schreiben? Reicht doch auch...
Grüße
Biber