如何使用批处理替换字符串中的第一个单词?

时间:2016-05-12 19:50:55

标签: string file variables batch-file replace

Hello 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"开头。我会将子字符串的开头改为" w1"如果你从字母" u"开始我会将子字符串更改为" 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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当您将var设置为"设置" var =!value_res_1!"或者"设置" var =!value_res_2!",你丢失了剩余的信息。在进行设置时,需要将剩余数据添加到var。

答案 2 :(得分: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处查看批处理文件中的数组管理。