Board logo

标题: [代码合集] 批处理将桌面所有TXT内指定位置替换为指定数值? [打印本页]

作者: 方恨少    时间: 2011-9-25 19:27     标题: 批处理将桌面所有TXT内指定位置替换为指定数值?

如桌面有3个这样的文本,需要同时将3个文本内第三行等号后
的69CV350替换为69CV380,请指教,谢谢。
作者: awk    时间: 2011-9-25 19:38

  1. sed -i "3s/=69CV350/=69CV380/" "%userprofile%\桌面\*.txt"
复制代码

作者: awk    时间: 2011-9-25 19:52

回复 3# 方恨少


先去下载一个sed.exe
作者: Seder    时间: 2011-9-25 20:13

sed下载地址:http://bbs.bathome.net/thread-1114-1-1.html
作者: 冷玉公子    时间: 2011-9-26 00:15

不知道为什么不用set写非要用sed呢,明天我补一个。
作者: 方恨少    时间: 2011-9-26 01:05

回复 6# 冷玉公子


    坐等。
作者: 方恨少    时间: 2011-9-26 09:59

回复 4# awk


    下载了,但是运行后还是没有被替换?
作者: awk    时间: 2011-9-26 10:35

回复 8# 方恨少


下载的哪个版本?
注:下载之后把sed.exe放到C:\Windows\System32\下面
作者: 方恨少    时间: 2011-9-26 11:17

回复 9# awk

sed.exe 4.1.4
请指教,谢谢啊
作者: awk    时间: 2011-9-26 11:45

回复 10# 方恨少


你的文件路径写错了,看看2楼怎么写的吧。
作者: 方恨少    时间: 2011-9-26 12:08

回复 11# awk


    我又直接复制了一遍,我好笨啊,困惑,是不是路径不可以有中文
作者: awk    时间: 2011-9-26 12:52

回复 12# 方恨少


版本问题,你下载一个4.2.1试试吧。
作者: 冷玉公子    时间: 2011-9-26 22:18

本帖最后由 冷玉公子 于 2011-9-26 22:38 编辑

来答题的:
首先要说一下 AWK 所使用的
  1. sed -i "3s/=69CV350/=69CV380/" "%userprofile%\桌面\*.txt"
复制代码

也是可行的但是需要第三方软件sed,第三方软件在特殊情况下使用确实有奇效,但是一般还是不建议用的。
具观察AWK同志中意的第三方命令程序基本上都是Linux的,所以看来是Linux的Shell高手啊

像楼主的这个题,如果是这么简单的话。用Set命令的方法是:
  1. 将要替换的值赋值于一个变量例如是变量是:Str
  2. Set Str=%Str:69CV350=69CV380%
  3. 意思就是将变量Str中的69CV350替换为69CV380
复制代码

具体按照楼主要求用的批处理整体就是这样的
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /R F:\Temp\P %%A In (*.txt) Do (
  3. @Rem 搜索指定目录下的指定所有txt文件
  4. For /F %%B In (%%A) Do (
  5.   Set "Str=%%B"
  6.   Set "Str=!Str:69CV350=69CV380!"
  7.   Echo !Str!
  8. @Rem 第二个For循环的意思是读取文本中的内容如果碰到69CV350就替换为69CV380
  9. )
  10. )
  11. Pause
复制代码

这里我用的测试文本为:100.txt 路径为:F:\Temp
只是测试并没有输出到文件,如果是学习这样就够了。
但是如果是求具体应用批处理的话,就要把详细的信息和想实现的东西说出来了。
上面的只是方法,供学习用。
作者: 方恨少    时间: 2011-9-27 08:59

回复 14# 冷玉公子


    多谢老师。
  我是想把所有文本内都替换掉并保存。我需要用很多个和一楼所示一样的文本,每次需要更改时都要一个一个打开修改保存,很浪费时间。
  还望不吝赐教,万分感谢。
作者: ArdentMan    时间: 2011-9-27 10:13

本帖最后由 ArdentMan 于 2011-9-27 10:54 编辑
  1. @Echo Off&SetLocalEnableDelayedExpansion
  2. Set "MyPath=请填写为自己桌面的绝对路径"
  3. Cd /d "%MyPath%"
  4. For /F "delims=" %%a In ('Dir /b *.txt') Do (
  5.   (For /F "tokens=1* delims=:" %%b In ('Findstr /n .* %%a') Do (
  6.     Set "Str=%%b"
  7.     If %%b equ 3 Set "Str=!Str:69CV350=69CV380!"
  8.     Echo,!Str!
  9.   ))>$
  10.   Move $ "%%a"
  11. )
复制代码

作者: Batcher    时间: 2011-9-27 10:22

回复 14# 冷玉公子


楼主需要处理第三行,你这个方法遇到下面的文件会出错吧?
Number=1234
station=114
productcode=69CV350
hello!world=69CV350




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2