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
Kommentar vom Moderator Biber am 05.04.2010 um 21:55:21 Uhr
Zwei klar vor- und ausgezeichnete Lösungsansätze - Beitrag auf "Beantwortet" gesetzt.
GELÖST

Inhalt einer txt auslesen und bei übereinstimmung Zeilen aus andered Datei einfügen

Frage Entwicklung Batch & Shell

Mitglied: connecthor

connecthor (Level 1) - Jetzt verbinden

02.04.2010, aktualisiert 05.04.2010, 4142 Aufrufe, 11 Kommentare

Hallo @all

ich hätte da ein kleines Problemchen--->

also ich hab da eine Datei in der ein Wert (z.b. [profil=0]) steht. Danach stehen noch ein paar andere Werte. Ich möchte danach noch weitere einträge einfügen. Das klappt schon.
Nun das echte Problem. Ich habe 2 unterschiedliche Einträge zu machen, je nach dem in welcher reihenfolge der user sich die Dateien installiert.

Hauptdatei <<<

[profil=0]
zeile1
zeile2
zeile3


dann soll sich der user ein programm installieren und in der Hauptdatei soll ein wert eingtragen werden wie folgt:

[profil=1]
zeile1
zeile2
zeile3

dann gibt es weitere programme die installiert werden können. Leider muss der Wert [profil] IMMER im Format
[profil=0]
...
[profil=1]
...
[profil=2]
...

vorliegen.

Was muss ich machen, um den schon installierten passus " [profil=*] auszulesen und bei weiteren installationen im richtigen format in der Datei zu hinterlegen??

Vielen Dank für eure Hilfe
Mitglied: bastla
02.04.2010 um 20:34 Uhr
Hallo connecthor!

Ließe sich Deine Problemstellung auf "Finde die niedrigste noch nicht in '[profil=Zahl]' enthaltene Zahl!" reduzieren?

In diesem Fall etwa so:
01.
@echo off & setlocal 
02.
set "Datei=D:\Die.ini" 
03.
set /a Nr=0 
04.
 
05.
:Loop 
06.
findstr /i /l "[profil=%Nr%]" "%Datei%">nul || goto :Found 
07.
set /a Nr+=1 
08.
goto :Loop 
09.
 
10.
:Found 
11.
set "Wert=[profil=%Nr%]" 
12.
echo %Wert%
Grüße
bastla
Bitte warten ..
Mitglied: LotPings
04.04.2010 um 19:16 Uhr
Hallo Bastla,

mit nur einem findstr und Vergleich der Nr dürfte das doch effizienter sein.
(auch wenn das in diesem Fall egal ist)

01.
@echo off & setlocal EnableDelayedExpansion 
02.
set "Datei=c:\Test\2010-04\Die.ini" 
03.
Set Nr=0 
04.
For /f "tokens=2 delims=[=]" %%A in ( 
05.
  'findstr /i /l "[profil=" "%Datei%"' 
06.
    ) Do If %%A GTR !Nr! Set Nr=%%A 
07.
set /a Nr+=1 
08.
set "Wert=[profil=%Nr%]" 
09.
echo %Wert%
Gruß
LotPings

Edit: Anregung von Bastla eingearbeitet
Bitte warten ..
Mitglied: bastla
04.04.2010 um 20:15 Uhr
Hallo LotPings!

Gute Idee , handwerklich fehlt allerdings "delayedExpansion" - es wird dadurch in der aktuellen Fassung immer "GTR 0" verglichen, was auch gut geht, wenn die Nummern innerhalb der ".ini"-Datei brav aufsteigend verwendet wurden; dann allerdings wäre der Vergleich überhaupt unnötig, und es müsste einfach die letzte vorkommende Nummer um 1 erhöht werden.

Eine Abwandlung davon - nämlich tatsächlich die ".ini" vorweg zu sortieren - würde aber daran scheitern, dass die Nummern keine feste Stellenanzahl haben.

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
05.04.2010 um 17:46 Uhr
Zitat von bastla:
Gute Idee , handwerklich fehlt allerdings "delayedExpansion"

Du hast ja sowas von Recht
Danke, habe es schon geändert

Ostergrüße
LotPings
Bitte warten ..
Mitglied: connecthor
08.04.2010 um 18:50 Uhr
Ja, so hab ich mir das gedacht. Profile=0 ist standard. hinzu sollen dann immer profile=1 usw. egal in welcher reichenfolge die programme installiert werden. ich werds mal gleich testen... danke schon mal im vorraus
Bitte warten ..
Mitglied: connecthor
13.04.2010 um 10:58 Uhr
ich habs jetzt... BASTLA hatte die beste (einzige lösung)
LotPings lösung war noch nicht ganz vollständig... es wurde das [profil=x] nicht um eins erhöht.

mein script sieht jetzt so aus:
set "User=%USERPROFILE%"
set "Datei=%USER%\anwendungsdaten\info.ini"
findstr /l "umb-storno" "%Datei%" && goto copy

set /a Nr=0
:Loop
findstr /i /l "[profile%Nr%]" "%Datei%">nul || goto :Found
set /a Nr+=1
goto :Loop

:Found
set "Wert=[profile%Nr%]"
echo. >> "%Datei%"
echo %Wert% >> "%Datei%"
more "d:\dazu.txt" >> "%Datei%"

:copy
...

vieken dank für eure hilfe jungs!!!!
Bitte warten ..
Mitglied: LotPings
13.04.2010 um 11:49 Uhr
Zitat von connecthor:
ich habs jetzt... BASTLA hatte die beste (einzige lösung)
LotPings lösung war noch nicht ganz vollständig... es wurde das [profil=x] nicht um eins erhöht.

Protest,
entsprechend deinen Vorgaben funktioniert das hier.
Hast du den letzten Stand berücksichtigt?
Zeile 7 erhöht die höchste gefundene Profil Nr um eins.

Damit meine Variante auch bei leerer Datei funktioniert, könnte man noch Zeile 3 ändern in:
Set Nr=-1
Gruß
LotPings
Bitte warten ..
Mitglied: connecthor
15.04.2010 um 10:25 Uhr
hab dein script probiert...
leider hat er immer nur [profile=1] eingefügt... keine ahnung warum.
hast du das mal getestet???
Bitte warten ..
Mitglied: LotPings
15.04.2010 um 12:11 Uhr
Ja, ich habs nochmal getestet.
Einzige Änderung in Zeile 3 auf -1, (Der alte Beitrag lässt sich mehr editieren).

Ich vermute mal einen Übertragungsfehler - bitte "in den Speicher kopieren" oder Quelltext ansehen+kopieren.
Computer sind ja so schrecklich konsequent - tun genau das und nur das, was ihnen vorgegeben wird.

Gruß
LotPings
Bitte warten ..
Mitglied: connecthor
16.04.2010 um 09:29 Uhr
dann mach ich irgendwas falsch..
das [profil=0] ist standard.
bei dir wird doch nur soweit ich sehe der erste gefundene wert genommen und +1 gesetzt.
da ist dann egal welche werte da noch stehen... oder?!?!?!
Bitte warten ..
Mitglied: LotPings
16.04.2010 um 09:50 Uhr
Moin moin,

nein Zeile 4-6 ist eine Schleife die alle gefundenen "[profil="-Zeilem mit dem vorherigen Maximalwert vergleicht und ihn ggfs ersetzt.
Man kann diese 3 Zeilen auch ohne Änderung der Funktion hinereinander in eine Zeile schreiben, ich finde es so halt übersichtlicher.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Batch & Shell
Per Batch ab einer bestimmten Stelle in einer .txt auslesen (1)

Frage von PeterPann zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...