标题: [代码合集] 批处理将桌面所有TXT内指定位置替换为指定数值? [打印本页]
作者: 方恨少 时间: 2011-9-25 19:27 标题: 批处理将桌面所有TXT内指定位置替换为指定数值?
如桌面有3个这样的文本,需要同时将3个文本内第三行等号后
的69CV350替换为69CV380,请指教,谢谢。
作者: awk 时间: 2011-9-25 19:38
- 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 所使用的
- sed -i "3s/=69CV350/=69CV380/" "%userprofile%\桌面\*.txt"
复制代码
也是可行的但是需要第三方软件sed,第三方软件在特殊情况下使用确实有奇效,但是一般还是不建议用的。
具观察AWK同志中意的第三方命令程序基本上都是Linux的,所以看来是Linux的Shell高手啊
像楼主的这个题,如果是这么简单的话。用Set命令的方法是:
-
- 将要替换的值赋值于一个变量例如是变量是:Str
- Set Str=%Str:69CV350=69CV380%
- 意思就是将变量Str中的69CV350替换为69CV380
复制代码
具体按照楼主要求用的批处理整体就是这样的
-
- @Echo Off&SetLocal EnableDelayedExpansion
- For /R F:\Temp\P %%A In (*.txt) Do (
- @Rem 搜索指定目录下的指定所有txt文件
- For /F %%B In (%%A) Do (
- Set "Str=%%B"
- Set "Str=!Str:69CV350=69CV380!"
- Echo !Str!
- @Rem 第二个For循环的意思是读取文本中的内容如果碰到69CV350就替换为69CV380
- )
- )
- Pause
复制代码
这里我用的测试文本为:100.txt 路径为:F:\Temp
只是测试并没有输出到文件,如果是学习这样就够了。
但是如果是求具体应用批处理的话,就要把详细的信息和想实现的东西说出来了。
上面的只是方法,供学习用。
作者: 方恨少 时间: 2011-9-27 08:59
回复 14# 冷玉公子
多谢老师。
我是想把所有文本内都替换掉并保存。我需要用很多个和一楼所示一样的文本,每次需要更改时都要一个一个打开修改保存,很浪费时间。
还望不吝赐教,万分感谢。
作者: ArdentMan 时间: 2011-9-27 10:13
本帖最后由 ArdentMan 于 2011-9-27 10:54 编辑
- @Echo Off&SetLocalEnableDelayedExpansion
- Set "MyPath=请填写为自己桌面的绝对路径"
- Cd /d "%MyPath%"
- For /F "delims=" %%a In ('Dir /b *.txt') Do (
- (For /F "tokens=1* delims=:" %%b In ('Findstr /n .* %%a') Do (
- Set "Str=%%b"
- If %%b equ 3 Set "Str=!Str:69CV350=69CV380!"
- Echo,!Str!
- ))>$
- Move $ "%%a"
- )
复制代码
作者: Batcher 时间: 2011-9-27 10:22
回复 14# 冷玉公子
楼主需要处理第三行,你这个方法遇到下面的文件会出错吧?
Number=1234
station=114
productcode=69CV350
hello!world=69CV350
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |