如何使用批处理替换文本文件的特定数字/字母?

时间:2017-03-23 16:46:51

标签: batch-file

想象一下,以下数字组成一个名为" dog.txt"的文本文件。

116267
831256个
876825个
687123

如何使用批处理代码仅更改这些字母中的少数几个?例如,如果我只想改变" 2"到了" U"在第一行,我如何选择该特定数字并进行更改?这些数字纯属占位符,除了他们所处的位置之外没有任何意义 - 我想让他们像棋盘一样被选中,它来自AH,1-8,而不是只需选择所有两个并将它们变成U.

TL; DR:把它变成这个

116U67
831256个
876825个
687123

1 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q42982193.txt"
SET "outfile=%destdir%\outfile.txt"


(
SET /a col=%2+1
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "." "%filename1%"') DO (
 IF %%a equ %1 (
  SETLOCAL ENABLEDELAYEDEXPANSION
  SET "line=:%%b"
  SET "line=!line:~0,%2!%3!line:~%col%!"
  ECHO !line:~1!
  ENDLOCAL 
 ) ELSE ECHO %%b
)
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q42982193.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

给定参数 row column replacementchar 然后只需使用findstr读取文件并为每行编号,然后将行#分配给%%a,将行内容分配给%%b }。

如果行号与参数列表中的所需数字不匹配,请重新排回该行。

如果匹配,则在其前面加上冒号(或任何其他字符),以便string-start从1开始,然后选择该行的相应部分,用替换字符将它们串起来并输出结果,删除第一个角色。