CMD脚本,用于查找和替换文件中找到的行的一部分
我需要找到myfile.txt中包含单词“MyWord”的所有行,然后用下一种方法替换该字符串的一部分: 原始行: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
...,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