Teile aus ini ersetzen mit Batch-Datei
Hallo zusammen,
habe eine Batch datei geschrieben mit folgendem einfachen inhalt....
xcopy "P:\Datentausch\Buske\dwgs" "C:\Programme\ordner\schuler goe\grstamm" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\plotter" "C:\Programme\ordner\Plotter" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\ini" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE" /K/R/I/S/C/H/D
ECHO ... Programmaktualiersung komplett! ...
in dem ordner "ini" befindet sich eine ini-datei von meinem lokalem Laufwerk und ersetzt nun mit dem 3. xcopy die ini-datei im ziel-ordner...
jetzt steht allerdings in meiner original-ini datei "eags_usr.ini" mein domäne-name (graphic_222) in einer variablen zeile....
dateiinhalt von datei "eags_usr.ini"-------
[Environ]
LmUpdateTimer=6000
Order=auftrag
MessageFile=ini/pvapimsg.gr
RpcServer=/.:/tntordsv_thebe0_fkeck
CoeRpc=0
CoeServerName=GRAPHIC_222
CoeServerPort=14321
dieser wert muss ausgetauscht werden durch den domänen-namen des zielrechners....
wie mache ich soetwas ??
Vielen Dank im voraus
habe eine Batch datei geschrieben mit folgendem einfachen inhalt....
xcopy "P:\Datentausch\Buske\dwgs" "C:\Programme\ordner\schuler goe\grstamm" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\plotter" "C:\Programme\ordner\Plotter" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\ini" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE" /K/R/I/S/C/H/D
ECHO ... Programmaktualiersung komplett! ...
in dem ordner "ini" befindet sich eine ini-datei von meinem lokalem Laufwerk und ersetzt nun mit dem 3. xcopy die ini-datei im ziel-ordner...
jetzt steht allerdings in meiner original-ini datei "eags_usr.ini" mein domäne-name (graphic_222) in einer variablen zeile....
dateiinhalt von datei "eags_usr.ini"-------
[Environ]
LmUpdateTimer=6000
Order=auftrag
MessageFile=ini/pvapimsg.gr
RpcServer=/.:/tntordsv_thebe0_fkeck
CoeRpc=0
CoeServerName=GRAPHIC_222
CoeServerPort=14321
dieser wert muss ausgetauscht werden durch den domänen-namen des zielrechners....
wie mache ich soetwas ??
Vielen Dank im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75387
Url: https://administrator.de/contentid/75387
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
25 Kommentare
Neuester Kommentar
Probier mal inifile.exe
http://home.mnet-online.de/horst.muc/wbat32d.htm#inifile
Ich hab ganz gute Erfahrungen damit gemacht. Nutze das als config file für mein Batch Programm.
Vorher mußt Du natürlich die Variable %Zielrechner% ermitteln. gibt's bestimmt auch einen Batch befehl dafür, fällt mir aber grade nicht ein
Überprüf mal mit "set" ob vielleicht schon eine passende Variable gesetzt ist. z.B. USERDOMAIN, dann kannst Du die auch gleich benutzen.
Greetz
Malte
http://home.mnet-online.de/horst.muc/wbat32d.htm#inifile
Ich hab ganz gute Erfahrungen damit gemacht. Nutze das als config file für mein Batch Programm.
inifile Laufwerk:pfad\zur\eags_usr.ini [Environ] CoeServerName=%Zielrechner%
Vorher mußt Du natürlich die Variable %Zielrechner% ermitteln. gibt's bestimmt auch einen Batch befehl dafür, fällt mir aber grade nicht ein
Überprüf mal mit "set" ob vielleicht schon eine passende Variable gesetzt ist. z.B. USERDOMAIN, dann kannst Du die auch gleich benutzen.
Greetz
Malte
Die Datei inifile.exe muß im gleichen Verzeichnis sein wie die Batch Datei.
Ich vermute es liegt daran, dass Du keine Anführungszeichen gesetzt hast, aber Leerstellen in der Verzeichnisstruktur hast.
Es müsste eigentlich auch das hier funktionieren:
xcopy "P:\Datentausch\Buske\dwgs" "C:\Programme\ordner\schuler goe\grstamm" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\plotter" "C:\Programme\ordner\Plotter" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\ini" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE" /K/R/I/S/C/H/D
inifile "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" [Environ] CoeServerName=%Domänenname%
ECHO ... Programmaktualisierung komplett! ...
Es müsste eigentlich auch das hier funktionieren:
xcopy "P:\Datentausch\Buske\dwgs" "C:\Programme\ordner\schuler goe\grstamm" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\plotter" "C:\Programme\ordner\Plotter" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\ini" "%userprofile%\Anwendungsdaten\ordner\Schuler GOE" /K/R/I/S/C/H/D
inifile "%userprofile%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" [Environ] CoeServerName=%Domänenname%
ECHO ... Programmaktualisierung komplett! ...
Moin Kannwischer,
ich würde da nicht so viel Heckmeck von machen.
dann.. (nach dem letzten xcopy-Klamauk):
Gruß
Biber
ich würde da nicht so viel Heckmeck von machen.
- Wenn in dem Ordner "P:\Datentausch\Buske\ini" eine Datei "eags_usr.ini" steht mit o.a. Inhalt und
- die soll (mit einer geänderten Zeile) nach "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE"
dann.. (nach dem letzten xcopy-Klamauk):
set "iniTargetDir=C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE"
Set "neuerServerName=whatever"
findstr /v /i "CoeServerName" "P:\Datentausch\Buske\ini\eags_usr.ini" >"%iniTargetDir%\eags_usr.ini"
echo CoeServerName=%neuerServername%>>"%iniTargetDir%\eags_usr.ini"
Gruß
Biber
Software Updates per eMail halte ich doch für sehr bedenklich. Dein Outlook ist so eingestellt, dass es Batch Dateien ausführt, und das an jedem Arbeitsplatz?
Na dann fröhliches hacken.
Du solltest Dir mal überlegen das über Softwareverteilung oder im Logon Script durch zu führen, oder per remote vom Admin Platz aus mit den "PSTools".
Das ist wesentlich sicherer.
Greetz
Malte
Na dann fröhliches hacken.
Du solltest Dir mal überlegen das über Softwareverteilung oder im Logon Script durch zu führen, oder per remote vom Admin Platz aus mit den "PSTools".
Das ist wesentlich sicherer.
Greetz
Malte
Naja, PSTools ist jetzt auch keine Hochsicherheitsanwendung, aber kann im Prinziep das was Du möchtest, und zwar ohne dass Du auf den User angewiesen bist.
Kuck mal hier: Silent Installation über das Netzwerk
Du legst einfach eine Textdatei an, in der alle Rechner drin stehen und rufst damit eine batch datei auf einem Network Share auf. Das macht psexec dann auf jedem Rechner. So sparst du Dir sogar das Verschicken der eMail. Der Rechner muß nur an sein und Du brauchst das jeweilige Admin Passwort.
Greetz
Malte
Kuck mal hier: Silent Installation über das Netzwerk
Du legst einfach eine Textdatei an, in der alle Rechner drin stehen und rufst damit eine batch datei auf einem Network Share auf. Das macht psexec dann auf jedem Rechner. So sparst du Dir sogar das Verschicken der eMail. Der Rechner muß nur an sein und Du brauchst das jeweilige Admin Passwort.
Greetz
Malte
Hallo,
ich habe es z.B. so gelöst, dass ich zuerst das ini File aufteile und zwar bis auf die Zeile davor und dahinter.
dateiinhalt von datei "eags_usr1 .ini"-------
[Environ]
LmUpdateTimer=6000
Order=auftrag
MessageFile=ini/pvapimsg.gr
RpcServer=/.:/tntordsv_thebe0_fkeck
CoeRpc=0
dateiinhalt von datei "eags_usr2.ini"-------
CoeServerPort=14321
dann ein zusammenführen mittels
TYPE eags_usr1 .ini > eags_usr .ini
ECHO CoeServerName=GRAPHIC_333 >> eags_usr .ini
und dann wieder ein
TYPE eags_usr2 .ini >> eags_usr .ini
Dann dürfte alles komplett sein.
Gruß
Stefan
ich habe es z.B. so gelöst, dass ich zuerst das ini File aufteile und zwar bis auf die Zeile davor und dahinter.
dateiinhalt von datei "eags_usr1 .ini"-------
[Environ]
LmUpdateTimer=6000
Order=auftrag
MessageFile=ini/pvapimsg.gr
RpcServer=/.:/tntordsv_thebe0_fkeck
CoeRpc=0
dateiinhalt von datei "eags_usr2.ini"-------
CoeServerPort=14321
dann ein zusammenführen mittels
TYPE eags_usr1 .ini > eags_usr .ini
ECHO CoeServerName=GRAPHIC_333 >> eags_usr .ini
und dann wieder ein
TYPE eags_usr2 .ini >> eags_usr .ini
Dann dürfte alles komplett sein.
Gruß
Stefan
Moin stbewo,
erstmal danke für das Posten Deiner Lösung.
Dennoch: wenn mein Lösungsansatz vom 6.12. nicht funktioniert, dann kann es eigentlich nur daran liegen, dass meine Grundannahmen nicht stimmen.
Damals schrieb ich:
Wenn nun die ursprüngliche Ini-Datei nicht in "P:\Datentausch\Buske\ini" liegt, sondern in einer Ordnerebene darunter, dann liefert der Findstr-Befehl bei mir auch nichts.
Nicht dass es wichtig wäre - aber interessieren würde mich natürlich schon, warum etwas nicht funktioniert.
Erst recht, wenn es sich nur um ein paar Zeilen Batch handelt.
Grüße
Biber
erstmal danke für das Posten Deiner Lösung.
Dennoch: wenn mein Lösungsansatz vom 6.12. nicht funktioniert, dann kann es eigentlich nur daran liegen, dass meine Grundannahmen nicht stimmen.
Damals schrieb ich:
* Wenn in dem Ordner "P:\Datentausch\Buske\ini" eine Datei "eags_usr.ini" steht mit o.a. Inhalt und
dann.. (nach dem letzten xcopy-Klamauk):
- die soll (mit einer geänderten Zeile) nach "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE"
dann.. (nach dem letzten xcopy-Klamauk):
> set "iniTargetDir=C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE"
> Set "neuerServerName=whatever"
> findstr /v /i "CoeServerName" "P:\Datentausch\Buske\ini\eags_usr.ini" >"%iniTargetDir%\eags_usr.ini"
> echo CoeServerName=%neuerServername%>>"%iniTargetDir%\eags_usr.ini"
>
Wenn nun die ursprüngliche Ini-Datei nicht in "P:\Datentausch\Buske\ini" liegt, sondern in einer Ordnerebene darunter, dann liefert der Findstr-Befehl bei mir auch nichts.
Nicht dass es wichtig wäre - aber interessieren würde mich natürlich schon, warum etwas nicht funktioniert.
Erst recht, wenn es sich nur um ein paar Zeilen Batch handelt.
Grüße
Biber
Moin Kannwischer,
ich hab Deine Anforderung schon verstanden, glaube ich.
Was ich mein(t)e ist: Wenn hier
...eine leere Datei geschrieben wird, dann wird entweder diese eags_usr.ini gar nicht gefunden oder sie enthält eben keine Zeilen, in denen Nicht "CoeServerName" steht.
Bitte füge doch mal vor der geposteten Zeile ein:
Grüße
Biber
ich hab Deine Anforderung schon verstanden, glaube ich.
Was ich mein(t)e ist: Wenn hier
findstr /v /i "CoeServerName" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini"
...eine leere Datei geschrieben wird, dann wird entweder diese eags_usr.ini gar nicht gefunden oder sie enthält eben keine Zeilen, in denen Nicht "CoeServerName" steht.
Bitte füge doch mal vor der geposteten Zeile ein:
If not exist "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" (
Echo Datei "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" nicht gefunden.
) ELSE (
Echo Gefunden...Inhalt:
Type "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini"
)
Grüße
Biber
Moin Kannwischer,
so ist die Prüfung aber nicht sonderlich ergiebig - zu dem Zeitpunkt, wo Du prüfst existiert die Datei mit hoher Wahrscheinlichkeit.
Ich meinte vorhin mit "einfügen vor der geposteten Zeile diese Reihenfolge:
Grüße
Biber
so ist die Prüfung aber nicht sonderlich ergiebig - zu dem Zeitpunkt, wo Du prüfst existiert die Datei mit hoher Wahrscheinlichkeit.
Ich meinte vorhin mit "einfügen vor der geposteten Zeile diese Reihenfolge:
xcopy "P:\Datentausch\Buske\dwgs" "C:\Programme\ordner\schuler goe\grstamm" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\plotter" "C:\Programme\ordner\Plotter" /K/R/I/S/C/H/D
xcopy "P:\Datentausch\Buske\ini" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE" /K/R/I/S/C/H/D
set "iniTargetDir=C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE"
Set "neuerServerName=%Computername%"
If not exist "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" (
Echo Datei "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" nicht gefunden.
) ELSE (
Echo Gefunden...Inhalt:
Type "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini"
)
pause
findstr /v /i "CoeServerName" "C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini" >"%iniTargetDir%\eags_usr.ini"
echo CoeServerName=%neuerServername%>>"%iniTargetDir%\eags_usr.ini"
ECHO ... Programmaktualisierung komplett! ...
pause
Grüße
Biber
Hallo Kannwischer!
... und dann wäre zB "sed" gefragt - oder die folgende Kombination Batch-VBScript:
Grüße
bastla
[Edit] Script angepasst, sodass Ersetzung auch "inplace" erfolgen kann. [/Edit]
kann man nicht direkt nach der Konstante "Graphik_222" suchen und diese durch den domänenname ersetzen ??
Das hätte wohl nur bei einer Suche nach "GRAPHIC_222" Sinn ... ... und dann wäre zB "sed" gefragt - oder die folgende Kombination Batch-VBScript:
...
set "iniTargetDir=C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\Ordner\Schuler GOE"
Set "neuerServerName=%Computername%"
Set "iniSource=C:\Dokumente und Einstellungen\%UserName%\Anwendungsdaten\ordner\Schuler GOE\eags_usr.ini"
Set "R=%temp%\Repl.vbs"
echo Set fso=CreateObject("Scripting.FileSystemObject"):Ini=Replace(fso.OpenTextFile("%iniSource%",1).ReadAll, "GRAPHIC_222", "%neuerServername%"):fso.OpenTextFile("%iniTargetDir%\eags_usr.ini",2,True).Write Ini>%R%
cscript //nologo %R%
Grüße
bastla
[Edit] Script angepasst, sodass Ersetzung auch "inplace" erfolgen kann. [/Edit]
@bastla
Ja. Natürlich.
...so antworte ich prinzipiell auf Oder-Fragen...
Als ich meinen Lösungsvorschlag (am 06.12.2007 um 16:47:58 Uhr) gemacht habe, habe ich unterstellt,
dass im QUELLverzeichnis ""P:\Datentausch\Buske\ini" eine Datei namens eastereggs.ini (oder so ähnlich) vorliegt.
Und in den ersten wiederkäuenden Versuchen hatte ich auch genau diese mit Findstr.exe gefiltert und auf jeden Fall die eventuell vorhandene im ZIEL-Verzeichnis überschrieben.
Wenn da kein Denkfehler war...
Grüße
Biber
Übrigens: Täusche ich mich, oder sind Quell- und Zielverzeichnis (und damit auch die jeweiligen Dateien) identisch?
Ja. Natürlich.
...so antworte ich prinzipiell auf Oder-Fragen...
Als ich meinen Lösungsvorschlag (am 06.12.2007 um 16:47:58 Uhr) gemacht habe, habe ich unterstellt,
dass im QUELLverzeichnis ""P:\Datentausch\Buske\ini" eine Datei namens eastereggs.ini (oder so ähnlich) vorliegt.
Und in den ersten wiederkäuenden Versuchen hatte ich auch genau diese mit Findstr.exe gefiltert und auf jeden Fall die eventuell vorhandene im ZIEL-Verzeichnis überschrieben.
Wenn da kein Denkfehler war...
Grüße
Biber