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-ID: 344112

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

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

rubberman
rubberman 21.07.2017 aktualisiert um 20:15:23 Uhr
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.
TsukiSan
TsukiSan 23.07.2017 um 16:20:28 Uhr
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
Hannes112
Hannes112 26.07.2017 aktualisiert um 15:30:26 Uhr
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 ?
TsukiSan
TsukiSan 26.07.2017 um 17:16:10 Uhr
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