hilli25
Goto Top

Per .bat Datei eine Zeile in vorhandene txt Datei einfügen

Hallo, habe folgendes Problem,

Ich möchte eine .bat Datei, wenn man diese ausführt, sollte dieser Text : VHHX 22.316667 114.203333
in ein vorhandenes Textfile eingesetzt werden.

So sieht das Txt File jetzt aus:
...
MMSP 22.254261-100.930761
VGEG 22.257022 91.822208
VERK 22.261667 84.810000
MMTM 22.289822 -97.864414
VARK 22.306695 70.779361
VHHH 22.308889 113.914722
VABO 22.330000 73.218861
MULM 22.336111 -83.641945
VEDX 22.339508 87.214497
OOFD 22.354420 56.484800
HEBL 22.375833 31.611667
MYMM 22.383792 -73.032536
MUPR 22.421356 -83.678428
...

nach dem Ausführen der .bat Datei sollte es so aussehen:

...
MMSP 22.254261-100.930761
VGEG 22.257022 91.822208
VERK 22.261667 84.810000
MMTM 22.289822 -97.864414
VARK 22.306695 70.779361
VHHH 22.308889 113.914722
VHHX 22.316667 114.203333
VABO 22.330000 73.218861
MULM 22.336111 -83.641945
VEDX 22.339508 87.214497
OOFD 22.354420 56.484800
HEBL 22.375833 31.611667
MYMM 22.383792 -73.032536
MUPR 22.421356 -83.678428
...

Es MUSS nach VHHH rein, es darf nicht am Ende stehen.

Danke für eure hilfe..

lg
hilli25

Content-ID: 144247

Url: https://administrator.de/contentid/144247

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

spacyfreak
spacyfreak 06.06.2010 um 22:18:29 Uhr
Goto Top
echo VHHX 22.316667 114.203333 >> text.txt

das >> steht für einfügen.

Falls der vorhandene text in der Zeile mit VHHX überschrieben werden soll, wirds bissl komplizierter, dabraucht man wohl eine
for i in

schleife

Aber das übersteigt meine geistigen Kapazitäten.
bastla
bastla 06.06.2010 um 22:20:21 Uhr
Goto Top
Hallo hilli25 und willkommen im Forum!

Etwa so:
@echo off & setlocal
set "Zusatz=VHHX 22.316667 114.203333"  
set "Nach=VHHH"  
set "Datei=D:\Textfile.txt"  
set "DateiTmp=%temp%\Textfile.tmp"  

move "%Datei%" "%DateiTmp%"  
for /f "delims=" %%i in (%DateiTmp%) do (  
    >>"%Datei%" echo %%i  
    echo %%i|findstr /b "%Nach%">nul && >>"%Datei%" echo %Zusatz%  
)
@spacyfreak
das >> steht für einfügen.
Nicht ganz; damit wird (am Ende) angefügt (was ja eben nicht passieren soll) ...

Grüße
bastla
spacyfreak
spacyfreak 06.06.2010 um 22:24:43 Uhr
Goto Top
joooo der bastla weiss halt wo der bauer den most holt, hat mir auch schonmal seeeehr geholfen.

@bastla

Eine frage...

wenn ich ein netzlaufwerk mappe.
Und ein Skript vom netzlaufwerk ausführe.
\\10.10.10.10\netlogon\kix450.exe bla.kix

Und dann das ´netzlaufwerk wieder trennen will nachdem das skript ausgeführt wurde.
wie könnte ich das erreichen?
bastla
bastla 06.06.2010 um 22:29:47 Uhr
Goto Top
Hallo spacyfreak!
Und dann das ´netzlaufwerk wieder trennen will nachdem das skript ausgeführt wurde.
wie könnte ich das erreichen?
Da sind wir ziemlich OT ...

... anyhow:
Was spricht dagegen, ein "non-persistent"-Mapping auf einen Buchstaben durchzuführen:
net use X: \\10.10.10.10\netlogon /p:no
und danach bei Bedarf auch gezielt mit
net use X: /d
wieder zu löschen?

Ansonsten die "Brutalvariante":
net use * /d /y
Grüße
bastla
spacyfreak
spacyfreak 06.06.2010 um 22:33:14 Uhr
Goto Top
yo die brutalvariante gefällt mir!
das hat auch timo an anderer stelle erwähnt.
den schalter /yes kannte ich nicht.

Obwohl den sogar die Baracke Obama kennt... ".../yes we can.."

Das yes bezieht sich doch wenn ich die hilfe richtig deute jedoch eigentlich auf /PERSISTENT?
und nicht auf /delete?
Oder ích nix kapische?

C:\Users\bloedmann>net use ?
Die Syntax dieses Befehls lautet:

NET USE
[Gerätename | *] [\\Computername\Freigabename[\Volume] [Kennwort | *]]
[/USER:[Domänenname\]Benutzername]
[/USER:[Domänenname im Punktformat\]Benutzername]
[/USER:[Benutzername@Domänenname im Punktformat]
[/SMARTCARD]
[/SAVECRED]
[[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {Gerätename | *} [Kennwort | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]
bastla
bastla 06.06.2010, aktualisiert am 18.10.2012 um 18:42:24 Uhr
Goto Top
Hallo spacyfreak!
Das yes bezieht sich doch wenn ich die hilfe richtig deute jedoch eigentlich auf /PERSISTENT?
und nicht auf /delete?
Oder ích nix kapische?
Kann Dir aber relativ egal sein, wenn das Laufwerk danach weg is (Biber schreibt da ja dann gerne "undokumentiert") ... face-wink

... und übrigens: Bevor er uns hier erwischt (und wenn's noch nicht genügen sollte), verlagern wir das in weiterer Folge besser in Thread ...

Grüße
bastla
hilli25
hilli25 06.06.2010 um 23:03:02 Uhr
Goto Top
@ bastla,

Danke, du warst mir eine große Hilfe, genau das habe ich stundenlang leider erfolglos im internet gesucht.

Danke vielmals,

lg
hilli25
bastla
bastla 06.06.2010 um 23:10:47 Uhr
Goto Top
Hallo hilli25!

Freut mich, wenn's klappt ... face-smile

... und sorry wegen meiner Beihilfe zum "Threadjacking" ...

Grüße
bastla
hilli25
hilli25 06.06.2010 um 23:40:27 Uhr
Goto Top
jup, und das nächste problem....

ich hätte jetzt die datei ein bisschen angepasst nur geht es nicht:

jetzt müsste das hier:

HONG KONG KAI TAK VHHX13 10930136 22.321667 114.196667111.9008800015
HONG KONG KAI TAK VHHX31 10930316 22.305500 114.214500109.9031600015


hier nach den vier einträgen von Hong Kong rein...

TAMPICO MMTM31 08367317 22.283233 -97.859942000.0031700080
TAMPICO MMTM36 04265002 22.289014 -97.864556000.0000200080
RAJKOT VARK05 05400048 22.304556 70.773833000.0004800438
RAJKOT VARK23 05400228 22.314472 70.785750110.9022800423
HONG KONG VHHH07L12468073 22.310917 113.897967111.1007300022
HONG KONG VHHH07R12468073 22.296675 113.899445109.3007300027
HONG KONG VHHH25L12468253 22.307431 113.932822108.9025300027
HONG KONG VHHH25R12468253 22.321122 113.929639110.9025300022
VADODARA VABO04 08100045 22.329583 73.218611000.0004500122
VADODARA VABO22 08100225 22.344028 73.234639110.5022500123
PINAR DELRIO-LA COLOMA MULM07 06562075 22.333317 -83.651164000.0007500131
PINAR DELRIO-LA COLOMA MULM25 06562255 22.338892 -83.632686000.0025500131

ich komm mir schon richtig blöd vor, bin aber schon fast am verzweifeln...
Du denkst dir sicher da kommt einer her, und will das und das und das...

danke im voraus schonmal für deine hilfe und schönen abend noch

lg
hilli
bastla
bastla 06.06.2010 um 23:59:50 Uhr
Goto Top
Hallo hilli!

In diesem Fall würde ich es mit einer anderen Strategie versuchen: Zuerst die Nummer der letzten passenden Zeile suchen und dann beim Neuschreiben der Datei nach dieser Zeile die neuen Zeilen einfügen:
@echo off & setlocal
set "Zusatz1=HONG KONG KAI TAK VHHX13 10930136 22.321667 114.196667111.9008800015"  
set "Zusatz2=HONG KONG KAI TAK VHHX31 10930316 22.305500 114.214500109.9031600015"  
set "Nach=HONG KONG"  
set "Datei=D:\Textfile.txt"  
set "DateiTmp=%temp%\Textfile.tmp"  

move "%Datei%" "%DateiTmp%"  
set "Zeile="  
for /f "delims=:" %%i in ('findstr /b /n /c:"%Nach%" "%DateiTmp%"') do set "Zeile=%%i"  
if not defined Zeile (echo Keine Zeile mit "%Nach%" gefunden! & pause & goto :eof)  

for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %DateiTmp%') do (  
    >>"%Datei%" echo %%j  
    if %%i==%Zeile% (
        echo %Zusatz1%
        echo %Zusatz2%
    )>>"%Datei%"  
)
Grüße
bastla

P.S.:
Du denkst dir sicher da kommt einer her, und will das und das und das...
Never mind - es zwingt mich ja keiner ... face-smile
hilli25
hilli25 07.06.2010 um 00:49:52 Uhr
Goto Top
hallo bastla,

auch das funktioniert wenn ich mir eine textdatei mit ein paar einträgen generiere.

wie hier:

ddddddddd
ddddddddd
dddddddd
ddddddd
ddddddd
HONG KONG
HONG KONG
HONG KONG
HONG KONG
HONG KONG KAI TAK VHHX13 10930136 22.321667 114.196667111.9008800015
HONG KONG KAI TAK VHHX31 10930316 22.305500 114.214500109.9031600015
ddddddddd
dddddddddd
dddddddddddd
dddddddddddddd
dddddddddddddd

Nimm ich jetzt das original File, funktioniert nix mehr, auch nicht bei der obigen Version.

Vl. hat ja die Datei zu viel Einträge bzw Zeilen.

Zeilenanzahl: 28295

Wenns nicht funktioniert, muss ich halt die Zeilen weiterhin jedes Monat per Hand einfügen.

lg
hilli
bastla
bastla 08.06.2010 um 08:33:38 Uhr
Goto Top
Hallo hilli25!

An der Zeilenanzahl sollte es eigentlich nicht liegen ...

Du könntest nur einmal das Suchen direkt an der Kommandozeile mit
findstr /b /i /n /c:"HONG KONG" "D:\Textfile.txt"
testen - die einzige Änderung hier ist der Schalter "/i", durch welchen keine Unterscheidung zwischen Groß- und Kleinschreibung erfolgt.

Noch als Hinweis: Wegen des "/b" wird nur nach Zeilen gesucht, in denen der Suchbegriff am Anfang der Zeile steht - zB ein Leerzeichen davor würde schon dazu führen, dass die Zeile nicht gefunden wird ...

Grüße
bastla
rubberman
rubberman 08.06.2010 um 17:43:24 Uhr
Goto Top
Hallo @all,

"nix mehr funktionieren" is eine relativ ungenaue Beschreibung. Ebenso besteht die Möglichkeit, dass der Prozess weit vor Erreichung des eigentlichen Einfügens abbricht. Hintergrund für dieses Verhalten könnte sein dass irgendwo in der Datei (die ja Zeile für Zeile per ECHO neu geschrieben wird) Sonderzeichen, wie <>|& vorkommen, die missinterpretiert werden.

@Hilli
Wird denn überhaupt begonnen, die Datei D:\Textfile.txt neu zu schreiben? Kommen o.g. Zeichen vor?

Grüße
rubberman
hilli25
hilli25 08.06.2010 um 20:25:42 Uhr
Goto Top
Zitat von @bastla:
Hallo hilli25!

An der Zeilenanzahl sollte es eigentlich nicht liegen ...

Du könntest nur einmal das Suchen direkt an der Kommandozeile mit
findstr /b /i /n /c:"HONG KONG" "D:\Textfile.txt"
> 
testen - die einzige Änderung hier ist der Schalter "/i", durch welchen keine Unterscheidung zwischen Groß-
und Kleinschreibung erfolgt.

Noch als Hinweis: Wegen des "/b" wird nur nach Zeilen gesucht, in denen der Suchbegriff am Anfang der Zeile steht - zB
ein Leerzeichen davor würde schon dazu führen, dass die Zeile nicht gefunden wird ...

Grüße
bastla


Hi,

ja, so hab ich es gefunden.


findstr /b /i /n /c:"HONG KONG" "wpNavAPT.txt"
5387:HONG KONG VHHH07L12468073 22.310917 113.897967111.1007300022
5388:HONG KONG VHHH07R12468073 22.296675 113.899445109.3007300027
5389:HONG KONG VHHH25L12468253 22.307431 113.932822108.9025300027
5390:HONG KONG VHHH25R12468253 22.321122 113.929639110.9025300022
bastla
bastla 08.06.2010 um 21:20:03 Uhr
Goto Top
Hallo hilli25!

Dann bleiben noch die berechtigten Fragen von rubberman offen ...

Grüße
bastla
hilli25
hilli25 08.06.2010 um 21:26:21 Uhr
Goto Top
Zitat von @rubberman:
Hallo @all,

"nix mehr funktionieren" is eine relativ ungenaue Beschreibung. Ebenso besteht die Möglichkeit, dass der Prozess
weit vor Erreichung des eigentlichen Einfügens abbricht. Hintergrund für dieses Verhalten könnte sein dass irgendwo
in der Datei (die ja Zeile für Zeile per ECHO neu geschrieben wird) Sonderzeichen, wie <>|& vorkommen, die
missinterpretiert werden.

@Hilli
Wird denn überhaupt begonnen, die Datei D:\Textfile.txt neu zu schreiben? Kommen o.g. Zeichen vor?

Grüße
rubberman

Das ist das einzige sozusagen im header des Textfile, was vorkommt.
danach kommen schon die einträge


;text
;Exported via DFD v1.0 10.0704
;Software copyright (c) 2010
;Support available via forum at http://adresse.com
;
;text
;text
;text
;text
;text
;
;text
;text
;text
;
;------------------------------------------------------
;test : zahlen (06/MAY/2010 - 02/JUN/2010) - Rev.1
;------------------------------------------------------
WILKINS YWKS09 10500093-66.687500 111.491667000.0009302366
WILKINS YWKS27 10500273-66.688889 111.563889000.0027302533
BASE MARAMBIO SAWB06 04134061-64.240119 -56.643156000.0006100760
BASE MARAMBIO SAWB24 04134241-64.236550 -56.618511000.0024100760
ISLE REY JORGE-MARTIN ABSCRM11 04239106-62.187778 -58.997222000.0010600142
ISLE REY JORGE-MARTIN ABSCRM29 04239286-62.193842 -58.976075000.0028600127
PUERTO WILLIAMS-GUARDIAMSCGZ08 04724078-54.930959 -67.637517000.0007800088
PUERTO WILLIAMS-GUARDIAMSCGZ26 04724258-54.931184 -67.615006000.0025800042
USHUAIA SAWH07 09186072-54.844050 -68.314650000.0007200085
USHUAIA SAWH25 09186252-54.842575 -68.276470111.3025200074
RIO GRANDE SAWE07 06562075-53.777997 -67.764670000.0007500064
... usw.


Ich denke dass es lange vor dem einfügen der Zeilen abbricht, ausserdem wird das textfile gelöscht...
hilli25
hilli25 08.06.2010 um 21:27:04 Uhr
Goto Top
Ja, hab es schon per zitat oben geschrieben...
bastla
bastla 08.06.2010 um 21:29:50 Uhr
Goto Top
... wodurch wir aber immer noch nicht wissen, ob die Datei neu geschrieben wird (das umbenannte Original müsste übrigens als "%temp%\Textfile.tmp" vorhanden sein) bzw wieviele Zeilen davon ...

Grüße
bastla
hilli25
hilli25 08.06.2010 um 21:30:43 Uhr
Goto Top
ja, werde es gleich mal checken...
hilli25
hilli25 08.06.2010 um 21:40:44 Uhr
Goto Top
Ich muss meine Aussagen zurücknehmen,

Es funktioniert, Ich dachte nur das cmd bleibt hängen, aber er generiert die neue Datei.

Es dauert nur länger, was auch klar ist bei 28000 einträgen oder mehr.

siehe hier:

HONG KONG VHHH07L12468073 22.310917 113.897967111.1007300022
HONG KONG VHHH07R12468073 22.296675 113.899445109.3007300027
HONG KONG VHHH25L12468253 22.307431 113.932822108.9025300027
HONG KONG VHHH25R12468253 22.321122 113.929639110.9025300022
HONG KONG KAI TAK VHHX13 10930136 22.321667 114.196667111.9008800015
HONG KONG KAI TAK VHHX31 10930316 22.305500 114.214500109.9031600015
VADODARA VABO04 08100045 22.329583 73.218611000.0004500122
VADODARA VABO22 08100225 22.344028 73.234639110.5022500123


Ich denke dass hat sich erledigt, ich danke allen die mir bei dieser (für mich) schwiereigen Aufgabe unterstützt haben.

Schönen abend noch...

lg hilli
bastla
bastla 08.06.2010 um 21:45:09 Uhr
Goto Top
Hallo hilli!

Ja, hätte ich vielleicht dazusagen sollen, dass das mit Batch geht - aber nicht läuft face-wink ...

Grüße
bastla
hilli25
hilli25 08.06.2010 um 21:55:04 Uhr
Goto Top
hehe, ja richtig... lol

danke noch mal...
leknilk0815
leknilk0815 01.03.2015 aktualisiert um 15:02:25 Uhr
Goto Top
Servus,
sorry, wenn ich den alten Fred hier kapere, aber mein Problemchen ist ziemlich ähnlich gelagert - vielleicht erbarmt sich ja jemand...

Ich möchte in eine XML- Datei, die eine Diashow steuert, täglich einen Eintrag zufügen, da die Slideshow letztlich für jeden Tag des Jahres ein Bild zeigen soll.
Dazu müsste einach vor dem Abschluss der Datei
<image img="images/20150101.jpg" caption="" />
<image img="images/20150102.jpg" caption="" />
<image img="images/20150103.jpg" caption="" />

</slideshow>
täglich eine Zeile eingefügt werden, also hier z.B.:
<image img="images/20150104.jpg" caption="" />
Aber wie?

Danke und Gruß - Toni
bastla
bastla 01.03.2015 um 16:43:58 Uhr
Goto Top
Hallo leknilk0815!

Batch und XML ist zumindest sehr mühsam - per VBS sähe das zB etwa so aus:
Datei = "D:\Datei.xml"  
Datum = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2) 'Tagesdatum im Format JJJJMMDD  
Einf = "<image img=""images/" & Datum & ".jpg"" caption="""" />"  
Vor = vbNewLine & "</slideshow>" 'mit Leerzeile  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Datei).ReadAll
fso.CreateTextFile(Datei).Write Replace(T, Vor, Einf & vbNewline & Vor)
Zu beachten: Anführungszeichen innerhalb von Anführungszeichen (Zeile 3) müssen verdoppelt werden.

Die Ausgangsdatei wird überschrieben, daher ggf vorher sichern.

Grüße
bastla
leknilk0815
leknilk0815 01.03.2015 aktualisiert um 17:44:27 Uhr
Goto Top
Servus bastla,
danke für die schnelle Antwort!
Leider tut sich nicht viel, ich hab den Pfad und den Dateinamen angepasst, es wird aber nichts eingefügt oder verändert.
Nur der Timestamp der xml- Datei wird geändert, sie wird also scheinbar neu geschrieben...
Hier noch zur Sicherheit die geänderte vbs:
[code]
Datei = "I:\Bildbearbeitung\flash_slideshow\flash_slideshow_free\slideshow.xml"
Datum = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2) 'Tagesdatum im Format JJJJMMDD
Einf = "<image img=""images/" & Datum & ".jpg"" caption="""" />"
Vor = vbNewLine & "</slideshow>" 'mit Leerzeile

Set fso = CreateObject("Scripting.FileSystemObject")
T = fso.OpenTextFile(Datei).ReadAll
fso.CreateTextFile(Datei).Write Replace(T, Vor, Einf & vbNewline & Vor)
[/code]
bastla
bastla 01.03.2015 um 17:56:04 Uhr
Goto Top
Hallo leknilk0815!

Ich war von einem Format Deiner XML wie in Deinem Beispiel oben ausgegangen:
<image img="images/20150101.jpg" caption="" />  
<image img="images/20150102.jpg" caption="" />  
<image img="images/20150103.jpg" caption="" />  

</slideshow>
Der Suchbegriff, also Leerzeile (genauer: Windows-Zeilenschaltung mit CR + LF) und danach "</slideshow>") muss exakt übereinstimmen - wenn also etwa "</slideshow>" nicht am Zeilenanfang steht, kann's nicht klappen ...

Grüße
bastla

P.S.: Die "Code"-Fomatierung benötigt anstatt "" die Tags "<>".
leknilk0815
leknilk0815 01.03.2015 um 18:06:18 Uhr
Goto Top
...kleine Ursache, große Wirkung...

Danke, jetzt tuts.
Der Tab am Zeilenanfang ist natürlich unnötig.

Gruß - Toni
bastla
bastla 01.03.2015 um 18:14:10 Uhr
Goto Top
Hallo leknilk0815!
Der Tab am Zeilenanfang ist natürlich unnötig.
Wenn Du ihn behalten wolltest, müsstet Du nur die Zeile 4 anpassen:
Vor = vbNewLine & vbTab & "</slideshow>" 'mit Leerzeile und TAB
Grüße
bastla
Ben.Blake.79
Ben.Blake.79 08.07.2016 aktualisiert um 00:12:12 Uhr
Goto Top
Hallo Bastla, ich habe gerade ein ähnliches Problem und da ist mir genau die Idee gekommen, welche Du beschreibst. Allerdings hatte ich befürchtet, daß leere Zeilen damit nicht übernommen werden und das hat sich da dann auch bewahrheitet. Gibt es da mit Windows Batch eine Möglichkeit, die Leerzeilen mitzubekommen? Die For-Schleife überspringt die ja einfach...
Ben.Blake.79
Ben.Blake.79 08.07.2016 um 02:26:26 Uhr
Goto Top
Nach viel rumprobieren, Tomaten auf den Augen unf Rumgefluche bin ich darauf gekommen:
@echo off & setlocal 
set "Zusatz1=;Mod "Armor Stat Customiser""  
set "Nach=MEDIKIT_RANGE_TILES"   
set "Datei=d:\versuch\Config\xxx.ini"   
set "DateiTmp=%temp%\Textfile.tmp"  

if exist %DateiTmp% del %DateiTmp%
move "%Datei%" "%DateiTmp%"  

for /f "tokens=1,2 delims=:" %%i in ('findstr /n "^" "%DateiTmp%"') do (  
	if "%%j"=="" >>"%Datei%" (  
		echo.
	) else (
		>>"%Datei%" echo %%j  
	)
	echo %%j|findstr /b "%Nach%">nul && >>"%Datei%" echo %Zusatz1%  
)
if exist %DateiTmp% del %DateiTmp%

Das funktioniert soweit, würde ich sagen...

Mit
move "%Datei%" "%DateiTmp%"   
echo %zusatz1% >> %Datei%
type "%DateiTmp%" >> "%Datei%"  
del %DateiTmp%
kopiert er an die Einfügung hinten dran den kompletten Dateiinhalt inkl. Leerzeilen, wenn man es nicht an einer anderen Stelle braucht...