webbudda
Goto Top

batch, string finden und erstezen

Hallo,

ich habe leider wenig ahnung von batches. ich habe eine datei, in welcher ich einen string bearbeiten möchte.

im original steht in der datei in einer zeile:
eintrag_name 4711

zwischen "eintrag_name" und dem entsprechenden value (4711) ist eine unbestimmte anzahl leerzeichen. Ich möchte diesen string in der datei finden und den value verändern (0815). leider bekomme ich das per batch nicht hin. kann mir jemand helfen?

wäre sehr sehr dankbar, habe schon viel ausprobiert, was ich hier gefunden habe. ohne erfolg.

Content-ID: 106158

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

Ausgedruckt am: 16.11.2024 um 03:11 Uhr

Turrex0100
Turrex0100 15.01.2009 um 14:46:24 Uhr
Goto Top
du möchtest also die zeichen 4711 durch 0215 in der datei austauschen?
webbudda
webbudda 15.01.2009 um 14:48:05 Uhr
Goto Top
ja richtig, sofern die 0815 da noch nicht steht.
möglich wäre aber eventuell auch, dass anstatt 4711 da eine 4710 stehen könnte. am besten die ganze zeile löschen und (möglichst an der stelle) ersetzen.
Turrex0100
Turrex0100 15.01.2009 um 14:50:02 Uhr
Goto Top
also mit batch ist das glaube ich nicht möglich du kannst jedoch ein temporäres vbs script in eine bat datei stecken
ich bastel dir ebend ein script zusammen....
Turrex0100
Turrex0100 15.01.2009 um 14:53:33 Uhr
Goto Top
@echo off & setlocal

set "Datei=C:\Dokumente und Einstellungen\text.txt"

set "Von=&&"

set "Nach=>"

set R=%temp%ReplaceInFile.vbs

%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))

cscript //nologo %R% "%Datei%" "%Von%" "%Nach%"


das musst du in eine bat datei stecken und die werte für dich ändern sollte dann klappen

lg Turrex
webbudda
webbudda 15.01.2009 um 14:58:56 Uhr
Goto Top
ehm erstmal natürlich besten dank. welche werte meinst du jetzt.
set "Von=4711"

set "Nach=0815"

? würde heissen ich hätte bei 4710 den wert nicht ersetzt?
Turrex0100
Turrex0100 15.01.2009 um 15:03:07 Uhr
Goto Top
genau,
du willst ja "von" 4711 "nach" 0215
ändern.

Allerdings: Das programm funktioniert nur, wenn in der datei der "von" wert steht

lg turrex
Turrex0100
Turrex0100 15.01.2009 um 15:05:24 Uhr
Goto Top
du kannst aber das script so aufbauen:


set "Datei=C:\Dokumente und Einstellungen\text.txt"
set "Von=3000"
set "Nach=1000"
:start
set R=%temp%ReplaceInFile.vbs
%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))
cscript //nologo %R% "%Datei%" "%Von%" "%Nach%"
cls
set "Von=4000"
set "Nach=0000"
goto :start
webbudda
webbudda 15.01.2009 um 15:12:06 Uhr
Goto Top
ok super, danke erstmal.
ich kann leider nicht davon ausgehen, dass ein bestimmter wert darin steht bzw kenne ich diesen nicht. muss nur sicherstellen, dass nach dem batch der neue drin steht...
Turrex0100
Turrex0100 15.01.2009 um 15:20:44 Uhr
Goto Top
naja ich hoffe erstmal das ich dir helfen konnte...

lg
bastla
bastla 15.01.2009 um 16:28:17 Uhr
Goto Top
@Turrex0100
Du bist ja ein richtiger Bastler ... face-wink

Grüße
bastla
bastla
bastla 15.01.2009 um 16:31:49 Uhr
Goto Top
Hallo webbudda und willkommen im Forum!
ich kann leider nicht davon ausgehen, dass ein bestimmter wert darin steht bzw kenne ich diesen nicht.
Lässt sich demnach das Problem so formulieren: "Ändere in allen Zeilen, die mit "eintrag_name" beginnen, die letzten 4 Stellen auf einen vorgegebenen Wert"?

Grüße
bastla
webbudda
webbudda 15.01.2009 um 16:43:44 Uhr
Goto Top
naja fast nech, würde da 123 stehen, die letzten 3 zeichen. ist halt schwierig.
Turrex0100
Turrex0100 15.01.2009 um 17:30:19 Uhr
Goto Top
ich versuche nur zu helfen bin allerdings selbst ein neuling...

lg turrex
bastla
bastla 15.01.2009 um 17:47:29 Uhr
Goto Top
Hallo webbudda!

Wie sieht's mit folgender Formulierung aus: "Ändere in allen Zeilen, die mit "eintrag_name" beginnen, alles nach dem letzten Leerzeichen auf den vorgegebenen Wert"?

Grüße
bastla
webbudda
webbudda 15.01.2009 um 20:28:33 Uhr
Goto Top
ja so kann man es auch formulieren.
bastla
bastla 15.01.2009 um 22:30:42 Uhr
Goto Top
Hallo webbudda!

Dann könnte das etwa so gehen:
@echo off & setlocal
set "Datei=D:\Textdatei.txt"  
set "Suche=eintrag_name"  
set "Neu=0815"  

set R=%temp%\ReplaceInFile.vbs
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%Datei%").ReadAll,vbCrLF):N="%Neu%"  
>>%R% echo S="%Suche%":L=Len(S):For Each Z In T:If Left(Z,L)=S Then If InStrRev(Z," ")^>0 Then Z=Left(Z,InStrRev(Z," "))^&N  
>>%R% echo A=A^&vbCrLF^&Z:Next:fso.CreateTextFile("%Datei%",True).Write Mid(A,3)  

cscript //nologo %R%
Gesucht wird nach "eintrag_name" entsprechend der exakten Schreibweise (mit Berücksichtigung von Groß- und Kleinschreibung), und die Ersetzung erfolgt "in" der Datei (ohne Erstellung einer Sicherungskopie).

Grüße
bastla