Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMD脚本,用于查找和替换文件中找到的行的一部分_Cmd - Fatal编程技术网

CMD脚本,用于查找和替换文件中找到的行的一部分

CMD脚本,用于查找和替换文件中找到的行的一部分,cmd,Cmd,我需要找到myfile.txt中包含单词“MyWord”的所有行,然后用下一种方法替换该字符串的一部分: 原始行: ...,31-01-2012,00,some_words_and_symbols_and_digits,MyWord,... 更换后: ...,31-01-2012,01,some_words_and_symbols_and_digits,MyWord,... 请帮我写这个cmd脚本 好的。。我有下一个代码: @echo off set code=MyWord set re

我需要找到myfile.txt中包含单词“MyWord”的所有行,然后用下一种方法替换该字符串的一部分:

原始行:

 ...,31-01-2012,00,some_words_and_symbols_and_digits,MyWord,...
更换后:

 ...,31-01-2012,01,some_words_and_symbols_and_digits,MyWord,...
请帮我写这个cmd脚本

好的。。我有下一个代码:

@echo off
set code=MyWord
set req=new request

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i
    ) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i
    ) 

IF %%a==%req% (
    SET echo %%a >> new.strings
    ) ELSE (
    echo %tempstr% >> new.strings
    )

)
@echo on
我的档案里有这样的东西:

 new request
 ...,31-01-2012,01,some_words_and_symbols_and_digits,MyWord,...
 new request
 ...,30-11-2011,01,some_words_and_symbols_and_digits,OtherWords,...
但我有一个错误:

ELSE was unexpected at this time.
如果我最后尝试简单的下一步

IF %%a==%req% SET tempstr=%%a
echo %tempstr% >> new.strings

然后我只有最后一行而不是其他行

您可以使用
find
命令筛选包含给定文本的行。如我所见,该文件是CSV。因此,您可以使用
for/f
解析找到的行。然后,您可以
echo
替换所需字段的所有解析文件

这将用“01”替换第3列中的所有值

因此,如果
%%a
等于
new
,它将执行
请求(echo…)
,否则确实是意外的。将
%%a
%req%%
用引号括起来,问题就会消失

但我也看到了其他问题。首先,在第二条if语句中设置了冗余的
set
。 其次,您需要使用变量的延迟扩展,否则您的
echo%tempstr%
将无法工作

所需更改后的代码:

@Echo off
setlocal enabledelayedexpansion

set code=MyWord
set req=new request

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

  IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i
  ) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i
  ) 

  IF "%%a"=="%req%" (
    echo %%a >> new.strings
  ) ELSE (
    echo !tempstr! >> new.strings
  )
)

endlocal

您可以使用
find
命令筛选包含给定文本的行。如我所见,该文件是CSV。因此,您可以使用
for/f
解析找到的行。然后,您可以
echo
替换所需字段的所有解析文件

这将用“01”替换第3列中的所有值

因此,如果
%%a
等于
new
,它将执行
请求(echo…)
,否则确实是意外的。将
%%a
%req%%
用引号括起来,问题就会消失

但我也看到了其他问题。首先,在第二条if语句中设置了冗余的
set
。 其次,您需要使用变量的延迟扩展,否则您的
echo%tempstr%
将无法工作

所需更改后的代码:

@Echo off
setlocal enabledelayedexpansion

set code=MyWord
set req=new request

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

  IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i
  ) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i
  ) 

  IF "%%a"=="%req%" (
    echo %%a >> new.strings
  ) ELSE (
    echo !tempstr! >> new.strings
  )
)

endlocal

我编辑了我的答案以回应您的编辑。下次请留下评论作为通知,因为stackoverflow不会通知用户对他们回答的问题所做的编辑。我编辑了我的答案以回应您的编辑。下次请留下评论作为通知,因为stackoverflow不会通知用户对他们回答的问题所做的编辑。
@Echo off
setlocal enabledelayedexpansion

set code=MyWord
set req=new request

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

  IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i
  ) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i
  ) 

  IF "%%a"=="%req%" (
    echo %%a >> new.strings
  ) ELSE (
    echo !tempstr! >> new.strings
  )
)

endlocal