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.......
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.......
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
17 Kommentare
Neuester Kommentar
Aloha,
ein wenig unvorteilhaft, eine Lösung auf halbgarem Beispiel zu präsentieren, grundsätzlich jedoch suchst du nach einer Lösung à la
Das ist jetzt nur grob und basiert auf einer Grundlage à la
Habe momentan leider keine Zeit, sonst würde ich dir das für Werte nacheinander gleich hinschreiben
greetz André
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
greetz André
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
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
moin illvisionz,
ist Heute die Formatierungshilfe defekt?
<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ß
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ß
Hallo illvisionz!
Sollte dann etwa so gehen:
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
Grüße
bastla
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
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
Hallo illvisionz!
Zunächst zu
Da anhand der Trennzeichen "=" und Leerzeichen aufgeteilt wird (siehe Zeile 10), kann es eigentlich nur an der Nummerierung der "
Grüße
bastla
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 TestDomino.Name=DMail04CLA/SRV/Test/Land/DE
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
bastla
moin illvisionz,
nimm als weiteren delimiter /
Mit Formatierungen in den Beiträgen insbesondere Kwählgohd wäre das aufgefallen.
Gruß Phil
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