Top-Themen

Aktuelle Themen (A bis Z)

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 Textdateien durchsuchen und einzelne Parameter ändern

Mitglied: Minister05

Minister05 (Level 1) - Jetzt verbinden

01.10.2013 um 15:06 Uhr, 1281 Aufrufe, 11 Kommentare, 2 Danke

Hallo zusammen!
Ich habe ein Problem welches ich alleine nicht gelöst bekomme…leider sind meine Kenntnisse im Bereich Batchprogrammierung nicht wirklich groß, daher hoffe ich hier Hilfe zu finden. Konkret geht es um folgende Aufgabe:

In einem Ordner1 existiert eine Grunddatei.txt
In einem weiteren Ordner2 existieren mehrere Testdateien.txt

Die Grunddatei sieht in etwa so aus:

;xxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxx
;xxxx
;xxxxxxxxxxxxxx
PAR_1=
PAR_2=
;xxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxx
PAR_3=
PAR_4=
;xxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxx
;xxxxxxxx
PAR_5

Usw.

Eine Testdatei hat diesen Inhalt, wobei die Zahlen in jeder Testdatei unterschiedlich sind:

;xxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxx
PAR_3=0,1,0,2
PAR_4=0,5,4,32
;xxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxx

Es soll jetzt jeweils die aktuelle Testdatei durchsucht werden nach Zeilen die nicht mit “;“ anfangen. Diese Zeilen sollen bis einschließlich dem Gleichheitszeichen übernommen werden und mit der Grunddatei verglichen werden. Anschließend sollen die Parameter genau an die richtige Stelle in der Grunddatei geschrieben werden (inkl. Zahlen). Das Endergebnis, welches separat abgespeichert werden soll, muss dann so aussehen:
;xxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxx
;xxxx
;xxxxxxxxxxxxxx
PAR_1=
PAR_2=
;xxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxx
PAR_3=0,1,0,2
PAR_4=0,5,4,32
;xxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxx
;xxxxxxxx
PAR_5

Damit wäre Testfall1 fertig. Analog soll danach mit allen weiteren Dateien verfahren werden, die in diesem Ordner mit “Testfall“ beginnen, so dass am Ende folgendes im Ordner zu finden ist.

In Ordner1 existiert weiterhin die Grunddatei.txt

In Ordner2 existieren: Testdatei1.txt
Testdatei2.txt
Testdatei3.txt
Testdatei4.txt
TestNeu1.txt
TestNeu2.txt
TestNeu3.txt
TestNeu4.txt

Die Grunddatei muss so flexibel sein, dass ich sie für jeden beliebigen Ordner mit Testfällen verwenden kann, daher ist es so umständlich…also immer Zugriff auf Unterordner, Datei laden, schauen welche Parameter zu ändern sind und erst dann zurück in die Grunddatei und dort entsprechend ändern und unter neuem Namen abspeichern. Weiß jemand Rat?
Mitglied: Endoro
02.10.2013 um 02:42 Uhr
Zitat von Minister05:
Weiß jemand Rat?

Hi, klar doch !
01.
@echo off &setlocal 
02.
set "gfile=Ordner1\Grunddatei.txt" 
03.
del "Ordner2\TestNeu*.txt" 2>nul 
04.
for %%a in (Ordner2\Testdatei*.txt) do ( 
05.
	set /a cnt+=1 
06.
	for /f "delims==" %%b in ('^<"%gfile%" find "="') do set "%%b=" 
07.
	for /f %%b in ('^<"%%~a" find "="') do set "%%~b" 
08.
	for /f "delims=" %%c in ('findstr /n "^" "%gfile%"') do ( 
09.
		set "line=%%c" 
10.
		set "prop=" 
11.
		setlocal enabledelayedexpansion 
12.
		set "line=!line:*:=!" 
13.
		for /f "eol==delims==" %%d in ("!line!") do set "prop=%%d" 
14.
		if "!line!" neq "!prop!" for /f %%d in ('set "!prop!" 2^>nul') do set "line=%%d" 
15.
		>>"Ordner2\TestNeu!cnt!.txt" echo(!line! 
16.
		endlocal 
17.
18.
19.
type "Ordner2\TestNeu*.txt"
lg.
Bitte warten ..
Mitglied: Minister05
02.10.2013 um 09:29 Uhr
Also zunächst mal vielen Dank für die schnelle Hilfe!!Es läuft auch soweit,macht was es machen soll. Nur leider macht es auch zwei Sachen die es nicht machen soll...

Zum einen macht es in einer Zeile aus einem

VS=
ein
VSEDEFLOGDIR=C:\ProgramData\McAfee\DesktopProtection

zum anderen hab ich eine Zeile in der Grunddatei wo nicht PAR_*= steht sondern nur PAR=
Daraus macht er natürlich dann auch den Wert der in der Testdatei steht...

Kann man da was dran machen?
Bitte warten ..
Mitglied: Endoro
02.10.2013 um 12:22 Uhr
Hi, ich habe eine Prise Regex reingemischt. Aber es wird auch langsamer so. Falls es zu langsam ist, solltest du das anders lösen, zB mit awk.
01.
@echo off &setlocal 
02.
set "gfile=Ordner1\Grunddatei.txt" 
03.
del "Ordner2\TestNeu*.txt" 2>nul 
04.
for %%a in (Ordner2\Testdatei*.txt) do ( 
05.
	set /a cnt+=1 
06.
	for /f "delims==" %%b in ('findstr /brc:"PAR_[0-9][0-9]*=" "%gfile%"') do set "%%b=" 
07.
	for /f %%b in ('findstr /brc:"PAR_[0-9][0-9]*=" "%%~a"') do set "%%~b" 
08.
	for /f "delims=" %%c in ('findstr /n "^" "%gfile%"') do ( 
09.
		set "line=%%c" 
10.
		set "prop=" 
11.
		setlocal enabledelayedexpansion 
12.
		set "line=!line:*:=!" 
13.
		if "!line:~-1!"=="=" for /f %%d in ('echo "!line:~0,-1!"^|findstr /brc:"\"PAR_[0-9][0-9]*\""') do set "prop=%%~d" 
14.
		if defined !prop! for /f %%d in ('set "!prop!"') do set "line=%%d" 
15.
		>>"Ordner2\TestNeu!cnt!.txt" echo(!line! 
16.
		endlocal 
17.
18.
19.
type "Ordner2\TestNeu*.txt" 
20.
 
lg.
Bitte warten ..
Mitglied: Minister05
02.10.2013 um 14:31 Uhr
Hmmm....
Jetzt schreibt er allerdings auch den Parameter nicht mehr in die TestNeu*.txt, den ich geändert haben wollte, sondern das Ergebnis ist gleich der Grunddatei.txt
Bitte warten ..
Mitglied: Endoro
02.10.2013 um 16:45 Uhr
Hi, also: funktioniert hier. Bitte auf c&p-Fehler, Pfade usw. überprüfen.
Sessionfoto
lg.
Bitte warten ..
Mitglied: Minister05
14.10.2013 um 14:25 Uhr
Hi, sorry war letzte Woche unterwegs...also die Datei läuft, zumindest das Beispiel was ich eingestellt habe...in meiner Originaldatei heißen die Parameter jedoch nicht PAR_1 usw sondern PS1_VAR= und PS2_VAR=

Dachte das macht keinen Unterschied, aber anscheinend wohl doch...hab jetzt in den Zeilen
6, 7 und 13 deines Programms folgendes geändert:

@echo off &setlocal
set "gfile=Ordner1\Grunddatei.txt"
del "Ordner2\TestNeu*.txt" 2>nul
for %%a in (Ordner2\Testdatei*.txt) do (
set /a cnt+=1
for /f "delims==" %%b in ('findstr /brc:"*_[A-Z][A-Z]=" "%gfile%"') do set "%%b="
for /f %%b in ('findstr /brc:"*_[A-Z][A-Z]=" "%%~a"') do set "%%~b"
for /f "delims=" %%c in ('findstr /n "^" "%gfile%"') do (
set "line=%%c"
set "prop="
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if "!line:~-1!"=="=" for /f %%d in ('echo "!line:~0,-1!"^|findstr /brc:"\"*_[A-Z][A-Z]\""') do set "prop=%%~d"
if defined !prop! for /f %%d in ('set "!prop!"') do set "line=%%d"
>>"Ordner2\TestNeu!cnt!.txt" echo(!line!
endlocal
)
)
type "Ordner2\TestNeu*.txt"


Doch leider läuft das nicht, er speichert als neue Dateien wie zuvor beschrieben quasi eine Kopie der Grunddatei neu ab...bin hier echt langsam am verzweifeln
Bitte warten ..
Mitglied: Endoro
15.10.2013 um 00:21 Uhr
Hi, dein regulärer Ausdruck ist ungültig.
PS1_VAR= und PS2_VAR=
PS[0-9][0-9]*_VAR=
lg.
Bitte warten ..
Mitglied: Minister05
15.10.2013 um 06:27 Uhr
Hi und guten morgen!
Danke dass du dich so rührend um mich kümmerst...inzwischen schreibt die Batch alles richtig in die Grunddatei
Das einzige was noch stört ist, dass an einer Stelle, nämlich beim Parameter der Form

OS=
am Ende
OS=WINDOWS_NT
steht...

wenn ich das noch weg bekäme, wäre es P*E*R*F*E*K*T

Die Batch sieht jetzt so aus


@echo off &setlocal
set "gfile=Ordner1\Grunddatei.txt"
del "Ordner2\TestNeu*.txt" 2>nul
for %%a in (Ordner2\Testdatei*.txt) do (
set /a cnt+=1
for /f "delims==" %%b in ('^<"%gfile%" findstr "[A-Z]*_[A-Z]*="') do set "%%b="
for /f %%b in ('^<"%%~a" findstr "[A-Z]*_[A-Z]*="') do set "%%~b"
for /f "delims=" %%c in ('findstr /n "^" "%gfile%"') do (
set "line=%%c"
set "prop="
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if "!line:~-1!"=="=" for /f "eol==delims==" %%d in ("!line!") do set "prop=%%~d"
if defined !prop! for /f %%d in ('set "!prop!"') do set "line=%%~d"
>>"Ordner2\TestNeu!cnt!.txt" echo(!line!
endlocal
)
)
Bitte warten ..
Mitglied: Minister05
15.10.2013 um 13:03 Uhr
So...läuft jetzt...auch ohne den WINDOWS_NT Quatsch...

@echo off &setlocal
set "gfile=Ordner1\Grunddatei.txt"
del "Ordner2\TestNeu*.txt" 2>nul
for %%a in (Ordner2\Testdatei*.txt) do (
set /a cnt+=1
for /f "delims==" %%b in ('^<"%gfile%" findstr "[A-Z]*_[A-Z]*="') do set "%%b="
for /f %%b in ('^<"%%~a" findstr "[A-Z]*_[A-Z]*="') do set "%%~b"
for /f "delims=" %%c in ('findstr /n "^" "%gfile%"') do (
set "line=%%c"
set "prop="
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if "!line:~-1!"=="=" for /f %%d in ('echo "!line:~0,-1!" ^|findstr "[A-Z]*_[A-Z]*"') do set "prop=%%~d"
if defined !prop! for /f %%d in ('set "!prop!"') do set "line=%%~d"
>>"Ordner2\TestNeu!cnt!.txt" echo(!line!
endlocal
)
)
type "Ordner2\TestNeu*.txt"

ENDLICH!!! VIELEN DANK!!!

Jetzt nur noch eine Schönheitsfrage....wenn ich die neue und die Grunddatei in Notepad++ schmeiße und vergleiche, würde ich gerne sehen, dass der geänderte Parameter nicht übereinstimmt. Müsste ja klappen, jedoch wird die komplette Datei als unterschiedlich angezeigt. Das Problem ist, dass in der neuen Datei TestNeu.txt an jedem Zeilenende ein Leerzeichen steht. Bekomme ich das noch weg?
Bitte warten ..
Mitglied: Endoro
15.10.2013 um 20:35 Uhr
Da sitzt wahrscheinlich ein Leerzeichen.
Ändere diese Zeile so ab:
01.
>>"Ordner2\TestNeu!cnt!.txt" (echo(!line!)
lg.
Bitte warten ..
Mitglied: Minister05
16.10.2013 um 06:31 Uhr
Super, funktioniert perfekt!! Danke dir vielmals!!!!!
Bitte warten ..
Ähnliche Inhalte
PHP
Textdatei durchsuchen mit php
gelöst Frage von ANTiNATORPHP2 Kommentare

Ich habe eine Textdatei deren Inhalt etwa so aussieht: Powerpointvortrag Worddatei Nochewas Worddatei usw. nun möchte ich mit einem ...

VB for Applications

Jede Zeile einer Textdatei bis zum Trennzeichen durchsuchen

gelöst Frage von karolsonVB for Applications6 Kommentare

Hallo an alle, Ich möchte mit VBA eine 50MB große Textdatei nach einer Zeichenkette durchsuchen und einige Begriffe aus ...

PHP

Mit php eine Textdatei durchsuchen

gelöst Frage von ANTiNATORPHP5 Kommentare

Langsam wird es mir Peinlich dies ist meine 3te frage innerhalb von 2 Tagen:/ Diese script sucht nach Ordnern ...

Entwicklung

Textdatei auf Rendundanz untersuchen und ändern

gelöst Frage von Daniel3Entwicklung19 Kommentare

Hallo zusammen, Ich müsste mit einer Bat oder kleineren Programm, eine txt Datei auf Rendundanz untersuchen und ausbessern. z.B. ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 1 TagAusbildung9 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 3 TagenSpeicherkarten3 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 3 TagenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 4 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Vmware
Offene LDAP-Server in AS
gelöst Frage von obi-wan-kenobiVmware19 Kommentare

Hallo alle Miteinander, ich habe ein Problem, unsere VM-Ware Appliance (Version. 6.5.0.10000) ist scheinbar angreifbar. Wir haben eben die ...

Windows Server
Zertifikat RemoteDesktop hinterlegen
gelöst Frage von Green14Windows Server12 Kommentare

Hallo zusammen. ich habe mehrere Server (WinSrv 2016). Die Server sind in keiner Domäne und keine Terminalserver. Ich verbinde ...

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1011 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...

Suche Projektpartner
Debian 9.5 32 Bit und PHP 7 Fehlerbeseitigungen
Frage von zeroblue2005Suche Projektpartner11 Kommentare

Hallo Zusammen, ich habe eine VM auf Basis von ESXI am laufen. Dieser wurde unter Debian 7 installiert mt ...