illvisionz

Wert auslesen und an bestimmter Stelle im Text einfügen

Guten Morgen

Ich bin neu hier und ihr habt mir schon viel geholfen, obwohl ich noch gar keine Frage gestellt habe, aber nun bin ich mit dem Latein am Ende bzw finde einfach keinen richtigen Beitrag der mir helfen kann. Es geht um ein kleines aber feines Batchprogramm, welches dem User einige Aufgaben erleichtern soll.

Ich habe im Userprofil eine *.ini Datei die bei jedem User unterschiedlich aufgebaut ist und auch unterschiedlich groß ist.
Aus dieser Datei möchte ich gerne bestimmte Werte (nicht die komplette Zeile) in eine andere Datei (*.txt) kopiert bekommen,
aber an eine bestimmte Stelle.

z.B. Wert aus ini Datei: MailServer=........(die Punkte sind die Werte die ich kopieren möchte)
Wert in der txt Datei: Client-Mailserver= (hier soll der Wert aus der ini stehen)

Außerdem kann es auch vorkommen, dass ich zwei Werte aus der ini Datei in der txt Datei hintereinander schreiben lassen muss

z.b. Wert1 \ Wert2

Ich habe es mit findstr /c "Wert" datei1.ini > datei2.txt versucht aber dort schreibt er mir nur die komplette Zeile aus der ini


Ist mit Batch überhaupt zu realisieren ?


Ich hoffe ihr könnt mir helfen und sollten Fragen im Raum stehen, versuche ich natürlich diese zu beantworten.......
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 180338

Url: https://administrator.de/forum/wert-auslesen-und-an-bestimmter-stelle-im-text-einfuegen-180338.html

Ausgedruckt am: 15.05.2025 um 16:05 Uhr

Skyemugen
Skyemugen 10.02.2012 um 10:50:19 Uhr
Goto Top
Aloha,

ein wenig unvorteilhaft, eine Lösung auf halbgarem Beispiel zu präsentieren, grundsätzlich jedoch suchst du nach einer Lösung à la
for /f "tokens=2 delims==" %%s in ('findstr "MailServer= Client-Mailserver=" "Textdatei.txt"') do echo %%s>>"datei2.txt"  

Das ist jetzt nur grob und basiert auf einer Grundlage à la
Text
Text
Mailserver=Text
Client-Mailserver=Text
Text
AnderesZeug=Text
Text

Habe momentan leider keine Zeit, sonst würde ich dir das für Werte nacheinander gleich hinschreiben face-wink

greetz André
bastla
bastla 10.02.2012 um 11:37:32 Uhr
Goto Top
Hallo illvisionz und willkommen als Mitglied!

Wie Skye ja schon angedeutet hat, wäre es sinnvoll, etwas genauer zu beschreiben (oder am besten mit je einem Beispiel für die ini- und die txt-Datei - und das dann gleich als "" formatiert - zu dokumentieren), was im Detail passieren soll ...
Auch wenn sich das vermutlich per Batch wird lösen lassen: Wäre VBS auch akzeptabel?

Grüße
bastla
illvisionz
illvisionz 10.02.2012 um 12:02:36 Uhr
Goto Top
Hallo
VBS geht leider nicht....

Was Skye angedeutet hat, passt schon zur hälfte ;)

Ich versuche es anders zu erklären:
Datei 1:
11005676.ini
Text
Text
Mailserver=dmail11
Username=11005676
Speicherort=C:\Doku~1\test

Datei2:
setup.txt
Text
Text
Client-Mailserver=dmail11
username=11005676
AnderesZeug=Text
Client-Speicherort= C:\Doku~1\test\11005676.ini <- entweder der Wert aus username= oder der Dateiname
Text

Ich kann die Datei leider nicht posten, da sich dort Firmenrelevante Daten befinden aber das Beispiel gibt es eigentlich recht gut wieder.
pieh-ejdsch
pieh-ejdsch 10.02.2012 um 14:13:29 Uhr
Goto Top
moin illvisionz,

ist Heute die Formatierungshilfe defekt?

Ich kann mir mehr Daten nur Malen, aber das Beispiel gibt es eigentlich recht gut wieder.

<code>
01. @echo off & setlocal
02.
03. ::echo on
04.
05. set "INI=%userprofile%\Desktop\CMD\*.ini"
06. set "TXT=%userprofile%\Desktop\CMD\setup.txt"
07.
08. findstr /n "^" "%TXT%" > "%temp%\txttemp"
09.
10. For /f "delims==: tokens=2,4" %%a in ('findstr "Username" "%INI%"') do (
11. if "%%~na" equ "%%b" for /f delims^=: %%i in ('findstr /n "Client-Speicherort=" "%temp%\txttemp" ^|findstr /v "%%~nxa"') do (
12. for /f "usebackq delims=: tokens=1*" %%j in ("%temp%\txttemp") do if %%j neq %%i (>&3 echo %%k) else >&3 echo %%k\%%~nxa
13. )3>"%TXT%" )
14. goto :eof


Tatsache - die Formatierungshilfe scheint defekt...
Gruß
illvisionz
illvisionz 12.02.2012 um 23:35:09 Uhr
Goto Top
Könntest du mir den Code auch erklären ?
Ich muss den Code nämlich auch verstehen können um ihn zu erweitern ?

Wäre super thx.....
illvisionz
illvisionz 13.02.2012 um 08:33:35 Uhr
Goto Top
Guten Morgen
So ich habe jetzt mal beide Codes getestet und leider funktioniert es nicht so wie ich gedacht habe.
Ich vermute mal, dass ich mich evtl missverständlich ausgedrückt habe oder mein Beispiel nicht so der bringer war ;)
Ich habe die Dateien um die es geht nun mal anonymisiert und hoffe das es so besser geht.

Die Notes.ini ist natürlich noch größer und mit mehr Werten bestückt, ich habe nur noch die Werte drinnen gelassen die für mich wichtig sind.

Notes.ini
[NOTES]
Directory=C:\Documents and Settings\%username%\Local Settings\Application Data\Lotus\Notes\Data
KeyFilename=%username%.id
Ports=TCPIP
MailFile=mail09/%username%.nsf
MailServer=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE

Die Setup.txt. soll aus einigen festen Werten bestehen und einigen Werten aus der Notest.ini. Die Reihenfolge der Werte ist vorgeschrieben und darf nicht verändert werden.

Setup.txt
Domino.Port=TCPIP <- soll der Wert "Ports" sein
Domino.Server=1
AdditionalServices=-1
Replication.Schedule=1
Username=%username% <- der Wert soll vom User selber eingegeben werden
Domino.Name=DMail04CLA/SRV/Test/Land/DE <- Der Wert soll aus "MailServer" kommen, aber ohne CN,OU,O usw
Keyfilename=C:\Documents and Settings\%username%\Local Settings\Application Data\Lotus\Notes\Data\%username%.id <- soll der Wert aus "Directory"+"KeyFilename" sein
$Client-Mailserver=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE <- soll aus dem Wert "MailServer" kommen
$Client-Mailfile=mail09/%username%.nsf <- soll aus dem Wert "MailFile" kommen
$Client-MailDomain=TEST
$Client-AddrBkTomigrate=alt\names_old.nsf


Ich hoffe das es nun besser geht und würde mich über eure Lösungen sehr freuen.
Skyemugen
Skyemugen 13.02.2012 um 09:03:51 Uhr
Goto Top
Aloha,

arbeitet denn der Code nach deinen Vorstellungen?

Ich habe nämlich meine Zweifel an der Zeile 10 aber eventuell liegt es daran, dass ich heute noch kein Frühstück hatte

greetz André
illvisionz
illvisionz 13.02.2012 um 09:20:12 Uhr
Goto Top
Jetzt funktioniert dein Code bastla, bis auf zwei kleine Fehler:

Falsch: Domino.Name=DMail04CLA/OU/Test/O/DE//
Richtig: Domino.Name=DMail04CLA/SRV/Test/Land/DE

und bei Keyfilename= C:\Documents and Settings ist hinter dem "=" Zeichen ein Leerzeichen zu viel.


Ihr seid echt super und habt es echt drauf Respekt.....
bastla
bastla 13.02.2012 um 14:14:34 Uhr
Goto Top
Hallo illvisionz!

Sollte dann etwa so gehen:
@echo off & setlocal
set "Ein=notes.ini"  
set "Aus=setup.txt"  

for /f "tokens=1* delims==" %%i in ('findstr /b "Ports=" "%Ein%"') do >"%Aus%" echo Domino.Port=%%j  
>>"%Aus%" echo Domino.Server=1  
>>"%Aus%" echo AdditionalServices=-1  
>>"%Aus%" echo Replication.Schedule=1  
>>"%Aus%" echo Username=%%username%%  
for /f "tokens=3,5,7,9,11 delims== " %%i in ('findstr /b "MailServer=" "%Ein%"') do >>"%Aus%" echo Domino.Name=%%i/%%j/%%k/%%l/%%m  
>>"%Aus%" <nul set /p=Keyfilename=  
for /f "tokens=1* delims==" %%i in ('findstr /b "Directory=" "%Ein%"') do >>"%Aus%" <nul set /p=%%j  
for /f "tokens=1* delims==" %%i in ('findstr /b "KeyFilename=" "%Ein%"') do >>"%Aus%" <nul set /p=%%j  
>>"%Aus%" echo\  
for /f "tokens=1* delims==" %%i in ('findstr /b "MailServer=" "%Ein%"') do >>"%Aus%" echo $Client-Mailserver=%%j  
for /f "tokens=1* delims==" %%i in ('findstr /b "MailFile=" "%Ein%"') do >>"%Aus%" echo $Client-Mailfile=%%j  
>>"%Aus%" echo $Client-MailDomain=TEST  
>>"%Aus%" echo $Client-AddrBkTomigrate=alt\names_old.nsf  
Die Pfade für die "notes.ini" und die "setup.txt" msst Du natürlich noch komplettieren ...

Das Schema für die auszulesenden Werte ist in den meisten Fällen: Suche die Zeile, die mit dem Schlüsselwort und "=" (also zB MailServer=) beginnt und verwende alles nach dem ersten "=" (als Trennzeichen festgelegt) als Ausgabedaten; Besonderheiten:
  • für "Domino.Name" muss sowohl anhand der "=" als auch anhand der Leerzeichen getrennt werden - der Rest ist abzählen ...
  • Um mehrere Werte in eine Zeile schreiben zu können, wird (für "Keyfilename") die Schreibweise "<nul set /p=Ausgabe" verwendet.

Grüße
bastla
illvisionz
illvisionz 13.02.2012 um 22:56:19 Uhr
Goto Top
Guten Abend
Ich habe eben auch noch gesehen, dass der Wert %username% nicht übernommen wird.
Ich setz eine Variable mit set, welche vom User selber eingegeben wird am Anfang. Die Variable wird aber nicht hinter Username eingefügt.

Woran könnte das liegen ?
bastla
bastla 13.02.2012 um 23:06:51 Uhr
Goto Top
Hallo illvisionz!

Zunächst zu
bei Keyfilename= C:\Documents and Settings ist hinter dem "=" Zeichen ein Leerzeichen zu viel.
Prüfe bitte, ob in Deiner Zeile 11 am Ende das +berzählige Leerzeichen steht (wird leider durch die Forumssoftware hinzugefügt).
Falsch: Domino.Name=DMail04CLA/OU/Test/O/DE//
Mit Deinen oben geposteten Testdaten ergibt sich im Ergebnis bei meinem Test
Domino.Name=DMail04CLA/SRV/Test/Land/DE
Da anhand der Trennzeichen "=" und Leerzeichen aufgeteilt wird (siehe Zeile 10), kann es eigentlich nur an der Nummerierung der "tokens" (3,5,7,9,11) liegen, wenn's bei Dir anders aussieht - eigentlich sollte das so sein:
MailServer=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE
1         |2 |3         |4  |5  |6  |7   |8 |9   |10|11
Grüße
bastla
illvisionz
illvisionz 14.02.2012 um 08:58:36 Uhr
Goto Top
Guten Morgen
Das mit dem Leerzeichen hat wunderbar geklappt und habe auch gleich alle andere Leerzeichen noch entfernt.
Danke für den Tipp

Das andere Problem besteht leider noch immer.
Ich habe mal den Test gemacht und nur das token 3 genommen und alle andere gelöscht.
Bei mir kommt dann aber folgendes Ergebnis:
Domino.Name=DMail04CLA/OU
pieh-ejdsch
pieh-ejdsch 14.02.2012 um 11:39:14 Uhr
Goto Top
moin illvisionz,

nimm als weiteren delimiter /
for /f "tokens=3,5,7,9,11 delims==/ " %%i in ('findstr /b "MailServer=" "%Ein%"') do >>"%Aus%" echo Domino.Name=%%i/%%j/%%k/%%l/%%m

Mit Formatierungen in den Beiträgen insbesondere Kwählgohd wäre das aufgefallen.
MailServer=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE
MailServer=CN=DMail04CLA/OU=SRV /OU=Test /O=Land /C=DE

Gruß Phil
bastla
bastla 14.02.2012 um 11:54:38 Uhr
Goto Top
@ph
... wobei allerdings oben (von dort hatte ich ja meine Testdaten) tatsächlich
MailServer=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE
steht (und die Schreibweise ohne Leerzeichen vor "/OU" auch nicht wirklich sinnvoll erscheint) ...

Grüße
bastla
illvisionz
illvisionz 14.02.2012 um 13:54:15 Uhr
Goto Top
Hey Leute
Das hat nun auch geklappt super . Ihr habt echt was drauf!!!

Doch nachdem das Problem erledigt ist und ich das Thema eigentlich schon schließen wollte, fiel mir auf das bei Keyfile ja zuerst "Directory" ins File geschrieben wird und dahinter der "Keyfile" aber leider wird es nicht mit einem \ getrennt.
Habe mich evtl oben irrtümlich ausgedrückt.
bastla
bastla 14.02.2012 um 16:48:57 Uhr
Goto Top
Hallo illvisionz!
aber leider wird es nicht mit einem \ getrennt.
Und einfach den Backslash an das Ende der Zeile 12 zu schreiben hast Du nicht schon selbst versucht?

Grüße
bastla
illvisionz
illvisionz 15.02.2012 um 07:48:48 Uhr
Goto Top
Guten Morgen
Neuer Tag, neues Glück und siehe da alle meine Probleme sind gelöst.

Ihr sei super und danke für die Hilfe und ich markiere das Thema als gelöst

THX