hannes112
Goto Top

Bat test suchen und dahinter hinzufügen

Hallo Zusammen,

in vielen Beiträgen habt ihr mir schon sehr oft weitergeholfen. Leider komm ich mit dem aktuellen Problem nicht weiter bzw. habe Probleme den richtigen Beitrag zu finden der genau mein Problem beschreibt.

Daher hier meine erste Frage: Ich habe eine "abc.txt" file und möchte in diesem hinter dem Text "WSid=" den aktuellen User Name schreiben.

Bislang suche ich immer nur mit "for /f "tokens=1-2 delims= " %%i in ('type abc.txt ^|find "WSid="') do set "WSwert=%%j"" in txt files und schreibe den Inhalt in eine variabel zb. j in dem fall.

Habe mit Echo und co versucht anstelle zu find zu arbeiten aber da fehlt mir das notwendige wissen.

Es wäre super wenn mir jemand weiterhelfen könnte

Vielen dank Hannes

Content-Key: 344112

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

Printed on: April 18, 2024 at 01:04 o'clock

Member: rubberman
rubberman Jul 21, 2017 updated at 18:15:23 (UTC)
Goto Top
Hallo Hannes

Du kannst eine Datei neu schreiben oder Text an eine bestehende Datei anhängen. Du kannst aber nicht irgend etwas mittem im Text hizufügen. Das bedeutet, du musst deine Datei zeilenweise auslesen und in eine andere Datei schreiben. Bevor du eine Zeile schreibst, musst du prüfen ob es die Zeile ist, die du ändern willst.

Ungefähr so (ungetestet in den Browser geschrieben):
@echo off &setlocal
set "file=abc.txt"  
set "key=WSid"  
set "val=%username%"  

setlocal EnableDelayedExpansion
<"!file!" >"!file!.~tmp" (  
  for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (  
    set "line="&set /p "line="  
    if not defined line (echo() else for /f "tokens=1* delims==" %%k in ("!line!") do if "%%k"=="!key!" (  
      echo(!key!=!val!
    ) else (
      echo(!line!
    )
  )
)
move /y "!file!.~tmp" "!file!"  

Grüße
rubberman

/EDIT
Beibehaltung von Leerzeilen hinzugefügt.
Member: TsukiSan
TsukiSan Jul 23, 2017 at 14:20:28 (UTC)
Goto Top
Hallo Hannes,

Rubbermann hat die Lösung in Batch.
Ich möchte nur mal eine Variante in VBS dazu erwähnen, wie man mittels Replace Daten an irgendeiner Stelle einer Text-Datei einfügen kann.
MeineDatei = "abc.txt"  
Alt = "WSid="  
Neu = "WSid=" & "Nutzername"  
Set fso=CreateObject("Scripting.FileSystemObject"):txt=fso.OpenTextFile(MeineDatei).ReadAll:fso.CreateTextFile(MeineDatei).Write Replace(txt,Alt,Neu)  

Schönen Sonntag und viele Grüße

Tsuki
Member: Hannes112
Hannes112 Jul 26, 2017 updated at 13:30:26 (UTC)
Goto Top
@ rubberman vielen dank. werde ich morgen testen und mich ggf. noch mal melden.


@ Tsuki interessant kann bzw muss ich username dann als variabel beim call der vbs mit übergeben? oder könnte ich die auch direkt auslesen ?
Member: TsukiSan
TsukiSan Jul 26, 2017 at 15:16:10 (UTC)
Goto Top
Hallo Hannes,

mit
Set objNetwork = WScript.CreateObject("WScript.Network")  
Username = objNetwork.UserName 
Kann man den Benutzernamen (username) mittels VBS auslesen.

Beispiel für deinen Fall:
Set objNetwork = WScript.CreateObject("WScript.Network")  
Username = objNetwork.UserName 
MeineDatei = "abc.txt"  
Alt = "WSid="  
Neu = "WSid=" & Username  
Set fso=CreateObject("Scripting.FileSystemObject"):txt=fso.OpenTextFile(MeineDatei).ReadAll:fso.CreateTextFile(MeineDatei).Write Replace(txt,Alt,Neu)  

Einfach etwas probieren und du bekommst das sicherlich schnell hin.

Grüße

Tsuki