j1rechert
Goto Top

Mit C einen Text String in einer Bat verändern...Hiilfeee!

Hallo Leute,

ich hoffe mir ist noch zu helfen. Versuche gerade mir ein wenig Cbeizubringen und "oh Wunder"....jede Menge Probleme und Fragenface-smile

Ich möchte mittels C oder Cplusplus einen Text String in einer .bat verändern.
Einfach in der .bat die beiden Wörter suchen lassen und durch andere ersetzen.

Hab jetzt nun einige Stunden mit versuchen und suchen verbracht....ich kriegs aber nicht gebacken.

Kann mir jemand sagen wie das funktioniert??

greets

Content-Key: 18222

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

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

Member: ketchup
ketchup Oct 21, 2005 at 19:13:30 (UTC)
Goto Top
warum gerade mit C?

face-wink
Mitglied: 13100
13100 Oct 21, 2005 at 20:50:00 (UTC)
Goto Top
was'n dat für ne eigenartige beschreibung.
kann man die mal klar definieren?
Member: j1rechert
j1rechert Oct 22, 2005 at 10:44:19 (UTC)
Goto Top
na ja, weil ich C lernen möchte
Bin aber für alle Vorschläge offen face-smile
Member: j1rechert
j1rechert Oct 22, 2005 at 10:48:05 (UTC)
Goto Top
also nochmal eine genauere Beschreibung:

Ich hab ein Login script (login.bat) in der ich einen Wert verändern möchte, der bei einer Prüfung ein Popup ausgibt. Dieses Popup möchte ich unterdrücken indem ich den Wert verändere und die Veränderung möchte ich über ein anders Script herführen (am liebsten in C/C++).
Mitglied: 13100
13100 Oct 22, 2005 at 11:38:27 (UTC)
Goto Top
kannst du mal dein loginscript posten, zumindest
den betreffenden teil.
Member: j1rechert
j1rechert Oct 22, 2005 at 11:49:51 (UTC)
Goto Top
dier der betreffende Text String:
SET FEHL=0
for /f "tokens=1,* delims=:" %%a in ('TYPE %temp%\login.log ^| find "Fehlend: "') do echo %%b >> %temp%\login.log.f& SET FEHL=1
IF NOT "%FEHL%"=="1" goto nopopup
(In dem Log wird geprüft ob eine Anwendung fehlt oder nicht zu erreichen ist und wird per Popup gemeldet.
ich möchte die Variable SET FEHL=1 verändern in SET FEHL=0 damit das Popup nicht mehr hochkommt. Da diese bat auf vielen Rechnern liegt und einige lokal nicht zu erreichen sind, möchte ich über ein Script oder eine EXE diese Veränderung remote ausführen.
Member: ketchup
ketchup Oct 22, 2005 at 14:00:14 (UTC)
Goto Top
dier der betreffende Text String:
SET FEHL=0
for /f "tokens=1,* delims=:" %%a
in ('TYPE %temp%\login.log ^| find
"Fehlend: "') do echo %%b >>
%temp%\login.log.f& SET FEHL=1
IF NOT "%FEHL%"=="1"
goto nopopup
(In dem Log wird geprüft ob eine
Anwendung fehlt oder nicht zu erreichen ist
und wird per Popup gemeldet.
ich möchte die Variable SET FEHL=1
verändern in SET FEHL=0 damit das Popup
nicht mehr hochkommt. Da diese bat auf vielen
Rechnern liegt und einige lokal nicht zu
erreichen sind, möchte ich über
ein Script oder eine EXE diese
Veränderung remote ausführen.


kopier einfach eine neue version via logon-script hin.
Member: j1rechert
j1rechert Oct 22, 2005 at 14:39:46 (UTC)
Goto Top
Okay..hab nun einen anderen Weg versucht.
Nun will ich über C eine komplett neue Datei erstellen in der das ganze Script rein geschrieben wird.
Der Compiler hängt sich aber bei dem Text (fprintf (datei, "if /i "%1"=="-r" echo) an den Sonderzeichen auf. Fehler lt. invalid operands of types 'const char[7] and int to binary operator%....wie kann ich in C die Umsetzung der Sonderzeichen bewerkstelligen??
Mitglied: 13100
13100 Oct 22, 2005 at 16:00:22 (UTC)
Goto Top
anführungszeichen: \"
anführungszeichen innerhalb eines, in anführungszeichen
gehaltenen stings, werden selten richtig interpretiert.
bei sonderzeichen sieht es auch nich besonders rosig aus.
wäre bei einer kompletten neuschreibung, eine
batchdatei nich sinnvoller?

rem * ins entsprechende verzeichnis wechseln
cd /d c:\windows

rem
* weg mit dem alten script
del script.cmd

rem * erstellen des neuen scripts, bzw
rem
* reinklatschen der neuen zeilen
echo "zeile1 von meinem neuen script" >> script.cmd
echo "zeile2 von meinem neuen script" >> script.cmd
echo "zeile3 von meinem neuen script" >> script.cmd
Member: j1rechert
j1rechert Oct 22, 2005 at 16:16:25 (UTC)
Goto Top
über die von dir genannte Möglichkeit habe ich auch nachgedacht, ist aber nicht der Sinn der Übung da ich es in C bewerkstelligen möchte.
Einfach eine .exe basteln die das ganze umsetzt, entweder eine komplett neue Datei mit dem nötigen Inhalt erstellt oder diesem SET Eintrag einen anderen Wert zuweist.
Das muss doch irgenwie zu handeln sein.
Übrigens ...Danke für deine Müheface-smile
Member: ketchup
ketchup Oct 22, 2005 at 18:20:44 (UTC)
Goto Top
über die von dir genannte
Möglichkeit habe ich auch nachgedacht,
ist aber nicht der Sinn der Übung da
ich es in C bewerkstelligen möchte.
Einfach eine .exe basteln die das ganze
umsetzt, entweder eine komplett neue Datei
mit dem nötigen Inhalt erstellt oder
diesem SET Eintrag einen anderen Wert
zuweist.
Das muss doch irgenwie zu handeln sein.
Übrigens ...Danke für deine
Müheface-smile

hm, also hab ich das richtig verstanden?
nur damit du dich mit C herumspielen kannst möchtest du für dein problem eine lösung über 97 umwege basteln?

wenn auf jedem client/server die gleiche datei liegt und du überall auch wieder die gleiche datei haben willst, dann erstelle dir doch diese neue datei lokal bei dir und kopiere sie dann einfach auf die jeweiligen clients.
ist 100mal einfacher und mit 1000mal weniger aufwand verbunden als ein edit-programm in C zu schreiben.
würds ja noch verstehen wenn du es in PERL oder kix32 lösen wollen würdest.
du kannst das problem aber auch einfach in batch lösen, indem du dich sed oder ähnlichem beschäftigst, die dir dann dein file editieren und nur den einen wert anpassen.

bist wohl ein admin mit zuviel zeit und zuwenig arbeit face-wink
Member: Guenni
Guenni Oct 23, 2005 at 22:17:32 (UTC)
Goto Top
über die von dir genannte
Möglichkeit habe ich auch nachgedacht,
ist aber nicht der Sinn der Übung da
ich es in C bewerkstelligen möchte.

@j1rechert

Hi,

wenn du das in C, C++, Pascal oder in was für eine Sprache auch immer
bewerkstelligen willst, eine Datei "remote" zu verändern, so wirst du ZWEI
Programme schreiben müssen.

Ein Programm läuft auf der "Remote-Maschine" als Server, also als ein
Programm, das auf Anfragen lauscht, um Dienste anzubieten.

Das zweite Programm, ist das Programm, das diese Dienste(als Client) in Anspruch nimmt.

Analog dazu nimm einfach das Beispiel Telnet. Ein Telnet-Client ist ein Programm
das auf einen anderen Computer zugreift. Was braucht man dazu?.....

einen Computer, der Telnet-Dienste bereitstellt.

Gruß
Günni
Member: ketchup
ketchup Oct 24, 2005 at 06:05:44 (UTC)
Goto Top
wenn du das in C, C++, Pascal oder in was
für eine Sprache auch immer
bewerkstelligen willst, eine Datei
"remote" zu verändern, so
wirst du ZWEI
Programme schreiben müssen.


hi,
da muss ich dir leider widersprechen.
es ist NICHT notwendig eine client-server-applikation zu schreiben.
auch wenn ers unbedingt in C oder sonst was schreiben möchte.
wozu gibt es UNC-Pfade bzw. Shares?

jürgen
Member: j1rechert
j1rechert Oct 24, 2005 at 10:00:59 (UTC)
Goto Top
Hi,

also ich hab es hinbekommenface-smile
Hab nur noch 2 kleine Problemchen:
Bei der Ausgabe schreiben in die Datei möchte ich ein Doppel Backslash und 2 mal das % Zeichen (also \\ und %%) ausgeben lassen. Er gibt mir aber immer nur eins aus. Ich wiess daß ich einen Backslash und ein % Zeichen mit einem zusätzlichen escapen muss, aber wie kommentiere ich im Compiler daß er mir die Zeichen doppelt ausgibt (z.B.: \\server\)?
Member: ketchup
ketchup Oct 24, 2005 at 10:11:50 (UTC)
Goto Top
noch 2 backslashes dazu?!

zb \\\\ => 2 backslashes escaped
beim % das gleiche

jürgen
Member: j1rechert
j1rechert Oct 24, 2005 at 11:05:51 (UTC)
Goto Top
thanks....geht einwandfrei face-smile
Member: Guenni
Guenni Oct 24, 2005 at 20:43:59 (UTC)
Goto Top
@ketchup

Hi,

das ist mir hinterher auch eingefallen, was ich da geschrieben hatte, aber da lag ich
schon im Bett, und hatte keine Lust mehr aufzustehen, um meinen "Senf" den ich
dazugegeben hab zu korrigieren.


Gruß
Günni