2016-05-12 73 views
0

你好StackExchange社区!如何用批处理替换字符串中的第一个单词?

我正试图解决替换与其他行中的第一个单词的问题。转换类型取决于单词的第一个字母。

重点。 我有以下形式的日志文件(INPUT.TXT):

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 

我想是这样的:

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 

如果字符串开头字母为“S”我会如果以字母“u”开头,则将子字符串的起始位置更改为“w1”。如上例所示,我会将子字符串更改为“w2”。第一个子字符串的长度可能不同。

我这里写的代码:

@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 

这个脚本的结果(OUTPUT.TXT)如下:

w1 
w1 
w1 
w2 
w1 
w2 
w1 

转换工作,但是从日志中丢失的其他信息。我相信这个问题是微不足道的,但是很长一段时间,我解决不了。请帮忙!

回答

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

谢谢,非常感谢! – Just4Droid

0

当您将var设置为“set”var =!value_res_1!“或”set“var =!value_res_2!”时,您将丢失其余信息。你需要将剩余的数据添加到var当你做的设置。

0

在这种方法中,添加或修改替换值更简单;它也稍快运行...

@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 

你可以在this site审查阵列在批处理文件的管理。

相关问题