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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144247
Url: https://administrator.de/contentid/144247
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
30 Kommentare
Neuester Kommentar
Hallo hilli25 und willkommen im Forum!
Etwa so:
@spacyfreak
Grüße
bastla
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%
)
das >> steht für einfügen.
Nicht ganz; damit wird (am Ende) angefügt (was ja eben nicht passieren soll) ...Grüße
bastla
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
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?
Hallo spacyfreak!
... anyhow:
Was spricht dagegen, ein "non-persistent"-Mapping auf einen Buchstaben durchzuführen:
und danach bei Bedarf auch gezielt mit
wieder zu löschen?
Ansonsten die "Brutalvariante":
Grüße
bastla
Und dann das ´netzlaufwerk wieder trennen will nachdem das skript ausgeführt wurde.
wie könnte ich das erreichen?
Da sind wir ziemlich OT ...wie könnte ich das erreichen?
... anyhow:
Was spricht dagegen, ein "non-persistent"-Mapping auf einen Buchstaben durchzuführen:
net use X: \\10.10.10.10\netlogon /p:no
net use X: /d
Ansonsten die "Brutalvariante":
net use * /d /y
bastla
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}]
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}]
Hallo spacyfreak!
... 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
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") ... und nicht auf /delete?
Oder ích nix kapische?
... 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
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:
Grüße
bastla
P.S.:
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%"
)
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 ...
Hallo hilli25!
An der Zeilenanzahl sollte es eigentlich nicht liegen ...
Du könntest nur einmal das Suchen direkt an der Kommandozeile mit
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
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"
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
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
"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
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
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
Hallo leknilk0815!
Batch und XML ist zumindest sehr mühsam - per VBS sähe das zB etwa so aus:
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
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)
Die Ausgangsdatei wird überschrieben, daher ggf vorher sichern.
Grüße
bastla
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]
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]
Hallo leknilk0815!
Ich war von einem Format Deiner XML wie in Deinem Beispiel oben ausgegangen:
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 "<>".
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>
Grüße
bastla
P.S.: Die "Code"-Fomatierung benötigt anstatt "" die Tags "<>".
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...
Nach viel rumprobieren, Tomaten auf den Augen unf Rumgefluche bin ich darauf gekommen:
Das funktioniert soweit, würde ich sagen...
Mit
kopiert er an die Einfügung hinten dran den kompletten Dateiinhalt inkl. Leerzeilen, wenn man es nicht an einer anderen Stelle braucht...
@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%