标题: [文本处理] [已解决]批处理替换多个文件中的字符串 [打印本页]
作者: zhou926 时间: 2013-1-7 10:55 标题: [已解决]批处理替换多个文件中的字符串
本帖最后由 zhou926 于 2013-1-8 14:01 编辑
在D盘下有五个文件夹A、B、C、D、E,我要将五个文件夹下的同一个文本文件msg.txt中“3307”数字替换为“3306”
作者: BAT-VBS 时间: 2013-1-7 12:35
- @echo off
- for %%a in (A B C D E) do (
- sed -i "s/3307/3306/g" "D:\%%a\msg.txt"
- )
复制代码
http://www.bathome.net/thread-16975-1-1.html
作者: zhou926 时间: 2013-1-7 13:44
回复 2# BAT-VBS
能不能用Windows系统内置的命令实现啊,因为有很多台服务器,我要一台台的往服务器上传sed.exe上去,这很麻烦
作者: hijackle 时间: 2013-1-8 08:43
- @echo off
- for /f "delims=" %%i in (msg.txt) do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- echo !str:3307=3306!>>msg1.txt
- del msg.txt /q&ren msg1.txt msg.txt
- endlocal
- )
复制代码
作者: BAT-VBS 时间: 2013-1-8 09:07
回复 4# hijackle
第六行可以简化成:复制代码
作者: BAT-VBS 时间: 2013-1-8 09:09
回复 4# hijackle
此方案的一个问题是,如果文件里面包含空行,那么会导致空行丢失。
作者: zhou926 时间: 2013-1-8 09:22
回复 6# BAT-VBS
文件里面有很多空行,那这样写就有问题了
作者: batman 时间: 2013-1-8 09:43
还是考虑复杂点:- @echo off
- for %%a in (a b c d e) do (
- if "%%a" equ "a" (
- (for /f "delims=" %%b in ('findstr /n .* %%a\msg.txt') do (
- set "str=%%b"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- if defined str set "str=!str:3307=3306!"
- echo,!str!
- endlocal
- ))>$
- move $ %%a\msg.txt
- ) else (
- copy /y a\msg.txt %%a\
- )
复制代码
作者: zhou926 时间: 2013-1-8 14:02
回复 8# batman
可以了,谢谢
作者: 大地 时间: 2023-1-21 12:18
大年30 各位老师好 我还在不断学习中 ,如果把这个题目改为4个不同的文件,且在同一文件下,替换4个文件中相同的内容,怎 么修改一下,谢谢!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |