Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wert auslesen und an bestimmter Stelle im Text einfügen

Frage Entwicklung Batch & Shell

Mitglied: illvisionz

illvisionz (Level 1) - Jetzt verbinden

10.02.2012 um 09:48 Uhr, 4026 Aufrufe, 17 Kommentare

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.......
Mitglied: Skyemugen
10.02.2012 um 10:50 Uhr
Aloha,

ein wenig unvorteilhaft, eine Lösung auf halbgarem Beispiel zu präsentieren, grundsätzlich jedoch suchst du nach einer Lösung à la
01.
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é
Bitte warten ..
Mitglied: bastla
10.02.2012 um 11:37 Uhr
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 "Code" 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
Bitte warten ..
Mitglied: illvisionz
10.02.2012 um 12:02 Uhr
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.
Bitte warten ..
Mitglied: pieh-ejdsch
10.02.2012 um 14:13 Uhr
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
</code>

Tatsache - die Formatierungshilfe scheint defekt...
Gruß
Bitte warten ..
Mitglied: illvisionz
12.02.2012 um 23:35 Uhr
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.....
Bitte warten ..
Mitglied: illvisionz
13.02.2012 um 08:33 Uhr
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.
Bitte warten ..
Mitglied: Skyemugen
13.02.2012 um 09:03 Uhr
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é
Bitte warten ..
Mitglied: illvisionz
13.02.2012 um 09:20 Uhr
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.....
Bitte warten ..
Mitglied: bastla
13.02.2012 um 14:14 Uhr
Hallo illvisionz!

Sollte dann etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ein=notes.ini" 
03.
set "Aus=setup.txt" 
04.
 
05.
for /f "tokens=1* delims==" %%i in ('findstr /b "Ports=" "%Ein%"') do >"%Aus%" echo Domino.Port=%%j 
06.
>>"%Aus%" echo Domino.Server=1 
07.
>>"%Aus%" echo AdditionalServices=-1 
08.
>>"%Aus%" echo Replication.Schedule=1 
09.
>>"%Aus%" echo Username=%%username%% 
10.
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 
11.
>>"%Aus%" <nul set /p=Keyfilename= 
12.
for /f "tokens=1* delims==" %%i in ('findstr /b "Directory=" "%Ein%"') do >>"%Aus%" <nul set /p=%%j 
13.
for /f "tokens=1* delims==" %%i in ('findstr /b "KeyFilename=" "%Ein%"') do >>"%Aus%" <nul set /p=%%j 
14.
>>"%Aus%" echo\ 
15.
for /f "tokens=1* delims==" %%i in ('findstr /b "MailServer=" "%Ein%"') do >>"%Aus%" echo $Client-Mailserver=%%j 
16.
for /f "tokens=1* delims==" %%i in ('findstr /b "MailFile=" "%Ein%"') do >>"%Aus%" echo $Client-Mailfile=%%j 
17.
>>"%Aus%" echo $Client-MailDomain=TEST 
18.
>>"%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
Bitte warten ..
Mitglied: illvisionz
13.02.2012 um 22:56 Uhr
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 ?
Bitte warten ..
Mitglied: bastla
13.02.2012 um 23:06 Uhr
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
Bitte warten ..
Mitglied: illvisionz
14.02.2012 um 08:58 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
14.02.2012 um 11:39 Uhr
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.
01.
MailServer=CN=DMail04CLA /OU=SRV /OU=Test /O=Land /C=DE 
02.
MailServer=CN=DMail04CLA/OU=SRV /OU=Test /O=Land /C=DE
Gruß Phil
Bitte warten ..
Mitglied: bastla
14.02.2012 um 11:54 Uhr
@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
Bitte warten ..
Mitglied: illvisionz
14.02.2012 um 13:54 Uhr
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.
Bitte warten ..
Mitglied: bastla
14.02.2012 um 16:48 Uhr
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
Bitte warten ..
Mitglied: illvisionz
15.02.2012 um 07:48 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Auslesen bestimmter Spalten aus csv (6)

Frage von Berti82 zum Thema Batch & Shell ...

Microsoft Office
gelöst Wie kann man die Standard-Schriftart bei einfügen von Text in Word 2013 festlegen? (3)

Frage von Rene1976 zum Thema Microsoft Office ...

VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...