Batch Zeile ersetzen

dimpo

Cadet 3rd Year
Registriert
Juli 2010
Beiträge
39
Ich möchte per Batch-Datei in einer Konfigurationsdatei eine einzige Zeile ändern. Habe schon Google bemüht aber nichts passendes gefunden.

Hiermit gebe ich die WorkStationID ein und speichere diese in einer gleichnamigen Variable:
Code:
set /p WorkStationID=WorkStationID eingeben:
echo %WorkStationID%
(das klappt soweit)

Jetzt möchte ich den Inhalt dieser Variable in die Konfigurationsdatei (hat mehrere Zeilen) einfügen.
Es soll die Zeile "WorkstationID=" mit "WorkStationID=%WorkStationID%" ersetzt werden.
Diesen Eintrag gibt es nur einmal. Die Datei "config.txt" soll überschrieben werden.

Kann bitte jemand helfen. Bin schon am verzweifeln. :rolleyes:
 
Hallöchen, das geht z.B. folgendermaßen:

Code:
@echo off & setlocal enabledelayedexpansion 

rem Parameter setzen
echo Bitte vollstaendigen Dateipfad angeben:
set /p Datei=
echo Welchen String ersetzen?
set /p Von=
echo Durch welchen String ersetzen?
set /p Nach=

rem Temp-Datei
set "t=%temp%\text.tmp" 

rem Temp-Datei definitiv neu
if exist "%t%" del "%t%" 

rem String ersetzen...
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%t%" echo !Line! 

rem temp-Datei - neue Datei
move "%t%" "%Datei%"

echo Fertig!
Kannst dann einfach dein "WorkStationID=" durch "WorkStationID=%WorkStationID%" ersetzen.

Fertig!

br
SacredSense
 
Zuletzt bearbeitet:
Code:
C:\Dokumente und Einstellungen\user.name\Desktop\>for /F "usebackq deli
ms=" %i in ("") do set "Line=%i"   & set "Line=!Line:=!"   & echo !Line!  1>>"C:
\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp"
Die Datei "" kann nicht gefunden werden.

hab mal das echo off rausgenommen.
was ist da falsch?
 
So kann das nicht funktionieren...als Bsp:
(C:\Dokumente und Einstellungen\user.name\Desktop\meine_config.ini) welche Datei soll sonst genutzt werden?
und demnach suchst du ... in ("")
Ansonsten übernimm mein Code-Teil doch einfach in eine .bat und starte sie...
...mehr brauchst du gar nicht machen, ggf. höchstens oben die Parameter direkt setzen.
 
Zuletzt bearbeitet:
Okay. Ich habe jetzt den Code von dir übernehmen, die Parameter und pause gesetzt:
Code:
@echo off & setlocal enabledelayedexpansion 

rem Parameter setzen
echo Bitte vollstaendigen Dateipfad angeben:
set /p Datei=[B]C:\configtest\config.txt[/B]
echo Welchen String ersetzen?
set /p Von=[B]WorkStationID=User1[/B]
echo Durch welchen String ersetzen?
set /p Nach=[B]WorkStationID=User999[/B]

rem Temp-Datei
set "t=%temp%\text.tmp" 

rem Temp-Datei definitiv neu
if exist "%t%" del "%t%" 

rem String ersetzen...
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%t%" echo !Line! 

rem temp-Datei - neue Datei
move "%t%" "%Datei%"

echo Fertig!

[B]pause[/B]

Und das hier ist das Ergebnis:
Code:
Bitte vollstaendigen Dateipfad angeben:
C:\configtest\config.txt
Welchen String ersetzen?
WorkStationID=User1
Durch welchen String ersetzen?
WorkStationID=User999
Die Datei "" kann nicht gefunden werden.
Das System kann die angegebene Datei nicht finden.
Fertig
Drücken Sie eine beliebige Taste . . .

Ich hab absolut keine Plan, warum das nicht funktionieren will, denn bei dir funktioniert es ja anscheinend :hammer_alt:

Hier noch die Ausgabe mit @echo on:
Code:
C:\configtest>rem Parameter setzen

C:\configtest>echo Bitte vollstaendigen Dateipfad angeben:
Bitte vollstaendigen Dateipfad angeben:

C:\configtest>set /p Datei=C:\configtest\config.txt
C:\configtest\config.txt

C:\configtest>echo Welchen String ersetzen?
Welchen String ersetzen?

C:\configtest>set /p Von=WorkStationID=User1
WorkStationID=User1

C:\configtest>echo Durch welchen String ersetzen?
Durch welchen String ersetzen?

C:\configtest>set /p Nach=WorkStationID=User999
WorkStationID=User999

C:\configtest>rem Temp-Datei

C:\configtest>set "t=C:\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp"

C:\configtest>rem Temp-Datei definitiv neu

C:\configtest>if exist "C:\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp" del "C:
\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp"

C:\configtest>rem String ersetzen...

C:\configtest>for /F "usebackq delims=" %i in ("") do set "Line=%i"   & set "Lin
e=!Line:=!"   & echo !Line!  1>>"C:\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp
"
Die Datei "" kann nicht gefunden werden.

C:\configtest>rem temp-Datei - neue Datei

C:\configtest>move "C:\DOKUME~1\user~1.name\LOKALE~1\Temp\text.tmp" ""
Das System kann die angegebene Datei nicht finden.

C:\configtest>echo Fertig!
Fertig

C:\configtest>pause
Drücken Sie eine beliebige Taste . . .
 
Versteh ich auch nicht, wieso liefert %Datei% nichts bei dir.
Sollte problemlos funktionieren, bei mir tuts das ja auch!*
Ersetze mal testweise "%Datei%" durch "C:\configtest\config.txt" und rem mal den Para aus und lass es dann noch mal laufen!


EDIT:
INFO: Du musst beim set das "/P" entfernen, wenn du die Parameter direkt setzt.

Welches OS nutzt du? ab Vista muss dus manchmal als Admin starten...
 
Zuletzt bearbeitet:
Danke! Jetzt hat es geklappt! Allerdings musste ich feststellen, dass bei der Nutzung mehrerer Variablen Fehler auftauchen können. Hab die bat dann in einzelne zerlegt. Nun funktioniert es wie gewünscht.
 
Zurück
Oben