savmaz
Goto Top

Batch oder VB - Wort an bestimmter Stelle einer Zeile einfügen

Hallo,

nach langer Zeit stehe ich mit meinem Skript Wissen mal wieder an und hoffe hier auf Hilfe:

Ich muss in verschiedenen Config Files, die Java Startparameter enthalten, an bestimmten Stellen einen Parameter einfügen - und das natürlich per Batch oder VB ;)

die Config Datei sieht in etwa so aus:

%java% -xms256 -xmx512 -saplog -user:Username - Paramterxyz -Prefix:Name1
%java% -ParameterXXX -xms256 -xmx256 -saplog -user:Username -Prefix:Name2
%java% -xms256 -xmx1024 -saplog -ParamterZZZ -user:Username -Prefix:NameN

also alle zeilen etwas unterschiedlich. trotzdem soll nach jedem "-xmx[egalwelcherwert]" der Wert "-xss256" hinzugefügt werden. Leider schaffe ich es bisher nur, komplette Zeilen zu ersetzten, was hier ja nicht möglich ist. Auch mein gut funktionierendes "finadandreplace.vbs" kann ich hier nicht verwenden, da ja nach dem -xmx ein "beliebiger" Wert stehen kann. Ich suche also nach einer Lösung, welche vermutlich so aussehen müsste:

suche nach -xmx und ermittle da anzahl der folgenden Stellen bis zum nächsten BLANK
gehe dorthin und füge -xss256 ein.....

ich hoffe sehr auf eure Hilfe und bedanke mich schon mal im vorraus!

lg
Andi

Content-Key: 140644

Url: https://administrator.de/contentid/140644

Printed on: April 16, 2024 at 07:04 o'clock

Member: bastla
bastla Apr 14, 2010 at 13:46:28 (UTC)
Goto Top
Hallo SavMaz!

Mit Batch wäre das (zumindest wenn der Parameter nicht zB auch gleich nach "%java%" oder am Ende der Zeile hinzugefügt werden kann) etwas mühsam - daher ein VBScript ("Add_xss.vbs"):
Set fso = CreateObject("Scripting.FileSystemObject")  
D = WScript.Arguments(0)
T = fso.OpenTextFile(D).ReadAll

Set rE = New RegExp
re.Global = True
re.Pattern = "(-xmx\d*)"  

T = rE.Replace(T, "$1 -xss256")  
fso.CreateTextFile(D).Write T
Aufzurufen ist das Script mit der Config-Datei als Parameter, also aus einem Batch etwa:
cscript //nologo Add_xss.vbs D:\Config.ini
Die Änderung wird "in" der Datei (ohne Erstellung einer Sicherungskopie) durchgeführt. Vorausgesetzt habe ich noch, dass auf "xmx" nur Ziffern folgen (ansonsen wäre "\d" zB durch "\S" zu ersetzen - siehe zB hier).
Als Batch-Variante (nur eine Datei zu verwalten):
@echo off & setlocal
set "Datei=D:\Config.ini"  
set "Such=(-xmx\d*)"  
set "Ersetz=$1 -xss256"  

set A=%temp%\Add_xss.vbs
> %A% echo Set fso=CreateObject("Scripting.FileSystemObject"):D=WScript.Arguments(0):T=fso.OpenTextFile(D).ReadAll  
>>%A% echo Set rE=New RegExp:re.Global=True:re.Pattern="%Such%":T=rE.Replace(T,"%Ersetz%"):fso.CreateTextFile(D).Write T  

cscript //nologo %A% "%Datei%" 
Grüße
bastla
Member: SavMaz
SavMaz Apr 15, 2010 at 06:27:58 (UTC)
Goto Top
Hallo bastla,

vielen dank für die rasche Hilfe - leider funktioniert keines der beiden skripts, die Datei wird zwar bearbeitet (NTFS Änderungsdatum), jedoch bleibt sie komplett unverändert!?

Und zwecks Verständniss würde mich interessieren, für was das $1 steht? Den Rest kann ich zwar halbwegs lesen, jedoch kann ich vb viel zu wenig um den "Fehler" zu finden, vielleicht kannst du nochmals darüber schauen...

Edit: Habe doch den "Fehler" entdeckt, der liegt aber bei mir bzw. einer nicht richtigen Angabe meinerseits - in der original Datei nennt sich der Parameter "-xmx128M" also doch nicht nur ziffern - bin gerade am experementieren mit den Patern-Eigenschaften, wenn ich es selbst schaffe, poste ich das Erebnis, falls nicht einen Hilfeschrei :D

Danke,
lg
Andi
Member: SavMaz
SavMaz Apr 15, 2010 at 06:52:24 (UTC)
Goto Top
Hallo nochmal,

so, habe mir das Skript jetzt doch noc zurecht basteln können - code anbei, falls das nochjemand braucht. Aufruf aus Batch mit:

cscript InserWord.vbs ConfigFilename.txt Such-Pattern(lt. Link von bastla) Einzufügender Text

also hier am konkreten Beispiel
cscript InserWord.vbs Config.cfg -xmx\d*M\b -xss256M


InsertWord.vbs
Set fso = CreateObject("Scripting.FileSystemObject")   
 
File = WScript.Arguments(0)
SearchString = WScript.Arguments(1)
AddString = WScript.Arguments(2)
 
SearchString="(" & SearchString & ")"  
 
T = fso.OpenTextFile(File).ReadAll 
 
Set rE = New RegExp 
re.Global = True
re.IgnoreCase = True
re.Pattern = SearchString
 
T = rE.Replace(T, "$1 "&AddString)   
fso.CreateTextFile(File).Write T