2016-05-12 3 views
0

Hallo StackExchange-Community!Wie ersetzt man das erste Wort in einer Zeichenkette mit Batch?

Ich versuche, das Problem zu lösen, das erste Wort in Folge durch das andere zu ersetzen. Die Art der Konvertierung hängt vom ersten Buchstaben des Wortes ab.

Auf den Punkt. Ich habe eine Protokolldatei (input.txt) in der folgenden Form:

s272400 616264890454 23.19 14.79 
s272400 616264890453 25.11 16.23 
s272400 616264890452 24.12 15.73 
u272400 616264890451 21.18 16.78 
s272400 616264890450 24.19 12.12 
u292402a 616264890449 21.18 18.98 
s292402a 616264890448 20.13 15.73 

Ich möchte wie folgt aussehen:

w1 616264890454 23.19 14.79 
w1 616264890453 25.11 16.23 
w1 616264890452 24.12 15.73 
w2 616264890451 21.18 16.78 
w1 616264890450 24.19 12.12 
w2 616264890449 21.18 18.98 
w1 616264890448 20.13 15.73 

Wenn die Zeichenfolge mit dem Buchstaben beginnt „s“ Ich würde ändere den Anfang der Teilzeichenfolge auf "w1", wenn du mit dem Buchstaben "u" beginnst Ich würde die Teilzeichenfolge wie im obigen Beispiel in "w2" ändern. Die erste Teilkette kann unterschiedlich lang sein.

Ich schrieb den Code hier:

@echo off 
setlocal enableextensions disabledelayedexpansion 
set "Ver_1=s" 
set "Ver_2=u" 
set "Ver_1_res=w1" 
set "Ver_2_res=w2" 
for /f "delims=" %%a in (INPUT.txt) do (
    set var=%%a 
    setlocal enabledelayedexpansion 
    set value_1=%Ver_1% 
    set value_2=%Ver_2% 
    set value_res_1=%Ver_1_res% 
    set value_res_2=%Ver_2_res% 
    set ProgramVersion=!var:~0,1! 

if !ProgramVersion!==!value_1! (
set "var=!value_res_1!" 
echo !var! 
) 
if !ProgramVersion!==!value_2! (
set "var=!value_res_2!" 
echo !var! 
) 
endlocal 
) >> OUTPUT.txt 
pause 

Das Ergebnis (output.txt) dieses Skript wird wie folgt:

w1 
w1 
w1 
w2 
w1 
w2 
w1 

Umbauarbeiten aber verlieren andere Informationen aus dem Protokoll. Ich bin mir sicher, dass das Problem trivial ist, aber ich kann es schon lange nicht mehr lösen. Bitte helfen Sie!

Antwort

1
@echo off 
setlocal enabledelayedexpansion 
(FOR /f "tokens=1,*" %%a IN (input.txt) DO (
    set a=%%a 
    if "!a:~0,1!"=="s" set b=w1 
    if "!a:~0,1!"=="u" set b=w2 
    echo !b! %%b 
))>output.txt 
+0

Vielen Dank, vielen Dank! – Just4Droid

0

Wenn Sie die Variable wie "set" setzen var =! Value_res_1! "Oder" set "var =! Value_res_2!", Verlieren Sie die restlichen Informationen. Sie müssen die verbleibenden Daten zu var hinzufügen, wenn Sie den Satz ausführen.

0

Bei dieser Methode ist es einfacher, Ersatzwerte hinzuzufügen oder zu ändern. es laufen auch etwas schneller ...

@echo off 
setlocal EnableDelayedExpansion 

rem Define the replacement values 
set "res[s]=w1" 
set "res[u]=w2" 

(for /F "tokens=1*" %%a in (input.txt) do (
    set "var=%%a" 
    for /F %%c in ("!var:~0,1!") do echo !res[%%c]! %%b 
)) > output.txt 

Sie können die Verwaltung der Arrays in Batch-Dateien bei this site überprüfen.