Wert in Batchdatei mit Batch suchen u. ersetzen
Hallo zusammen,
Ich habe ein Batch-Script das mir unterschiedliche Einstellungen am PC automatisiert durchführt.
Ein Teil davon ist in einer Scriptvorlage *.bat eine Platzhaltervariable durch eine Benutzereingabe zu ersetzen und das individuelle Script an einen bestimmten Ort zu kopieren.
Scriptvorlage:
-> hier soll die Variable {NETZuser} durch eine Benutzereingabe im Basisscript ersetzt werden
Basisscript:
Bei der Variante im Basisscript habe ich mehrere Probleme:
1. der letzte Teil funktioniert nur mit einem statischem "Ersatztext" und keiner Variable %NETZuser% wie im aktuellem Beispiel
2. wenn im letzte Teil ein fester Ersatzwert angegeben wird, werden die Zeilenumbrüche aus der Scriptvorlage.bat in der Scriptvorlage_User.bat nicht berücksichtigt
Danke und Viele Grüße
Ich habe ein Batch-Script das mir unterschiedliche Einstellungen am PC automatisiert durchführt.
Ein Teil davon ist in einer Scriptvorlage *.bat eine Platzhaltervariable durch eine Benutzereingabe zu ersetzen und das individuelle Script an einen bestimmten Ort zu kopieren.
Scriptvorlage:
-> hier soll die Variable {NETZuser} durch eine Benutzereingabe im Basisscript ersetzt werden
@ECHO OFF
CLS
set NETZlaufwerk=B:
if not exist %NETZlaufwerk% goto conn
NET USE %NETZlaufwerk% /delete
:conn
NET USE %NETZlaufwerk% \\192.198.117.100\Ordner /user:<domain>\{NETZuser} /persistent:yes
Basisscript:
@echo off
REM Abfrage User
set /p NETZuser=Bitte Username angeben:
REM User-Batch erzeugen
set filesource=%cd%\source\Scriptvorlage.bat
set filedestination=%cd%\source\Tools\Netzlaufwerke\Scriptvorlage_User.bat
if exist %filedestination% del %filedestination%
for /F "delims=" %%i in (%filesource%) do (
set text=%%i
set text=!text:{NETZuser}=%NETZuser%!
echo !text! >> %filedestination%
)
1. der letzte Teil funktioniert nur mit einem statischem "Ersatztext" und keiner Variable %NETZuser% wie im aktuellem Beispiel
2. wenn im letzte Teil ein fester Ersatzwert angegeben wird, werden die Zeilenumbrüche aus der Scriptvorlage.bat in der Scriptvorlage_User.bat nicht berücksichtigt
Danke und Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 519496
Url: https://administrator.de/contentid/519496
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Zitat von @chef1568:
Bei der Variante im Basisscript habe ich mehrere Probleme:
1. der letzte Teil funktioniert nur mit einem statischem "Ersatztext" und keiner Variable %NETZuser% wie im aktuellem Beispiel
Variablen mit Variablen Werten zu ersetzen, funktioniert innerhalb einer For-Schleife nicht. Um das zu umgehen, müsstest du einen Bereich außerhalb der For-Schleife callenBei der Variante im Basisscript habe ich mehrere Probleme:
1. der letzte Teil funktioniert nur mit einem statischem "Ersatztext" und keiner Variable %NETZuser% wie im aktuellem Beispiel
for /F "delims=" %%i in (%filesource%) do (
set text=%%i
call :Ersetze
echo !text! >> %filedestination%
)
goto :EoF
:Ersetze
set text=!text:{NETZuser}=%NETZuser%!
Allerdings würde ich die For-Schleife hier gänzlich weglassen und die Variable %NETZuser% direkt als Argument an die Scriptvorlage übergeben
%filesource% %NETZuser%
@ECHO OFF
CLS
set NETZlaufwerk=B:
if not exist %NETZlaufwerk% goto conn
NET USE %NETZlaufwerk% /delete
:conn
NET USE %NETZlaufwerk% \\192.198.117.100\Ordner /user:<domain>\%1 /persistent:yes
Verstehe, dann halt über die Variante mittels call. Was Die Leeren zeilen angeht.. die werden mit for /f nie berücksichtigt, hier müssen wir tricksen, indem wir mit find die Zeilennummern der Datei mit Ausgeben und diese dann über die Tokens der Forschleife wieder wegschneiden.
@echo off
setlocal enabledelayedexpansion
REM Abfrage User
set /p NETZuser=Bitte Username angeben:
REM User-Batch erzeugen
set filesource=%cd%\source\Scriptvorlage.bat
set filedestination=%cd%\source\Tools\Netzlaufwerke\Scriptvorlage_User.bat
if exist %filedestination% del %filedestination%
for /F "skip=2 tokens=1,* delims=]" %%i in ('find /v /n "" %filesource%') do (
if "%%j" equ "" (echo. >> %filedestination%) else (
set text=%%j
call :Ersetze
echo !text! >> %filedestination%
)
)
goto :EoF
:Ersetze
set text=!text:{NETZuser}=%NETZuser%!