找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27275|回复: 9

[文本处理] [已解决]批处理替换多个文件中的字符串

[复制链接]
发表于 2013-1-7 10:55:31 | 显示全部楼层 |阅读模式
本帖最后由 zhou926 于 2013-1-8 14:01 编辑

在D盘下有五个文件夹A、B、C、D、E,我要将五个文件夹下的同一个文本文件msg.txt中“3307”数字替换为“3306”

评分

参与人数 1PB +2 收起 理由
batman + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-1-7 12:35:52 | 显示全部楼层
  1. @echo off
  2. for %%a in (A B C D E) do (
  3.     sed -i "s/3307/3306/g" "D:\%%a\msg.txt"
  4. )
复制代码
http://www.bathome.net/thread-16975-1-1.html
 楼主| 发表于 2013-1-7 13:44:41 | 显示全部楼层
回复 2# BAT-VBS


    能不能用Windows系统内置的命令实现啊,因为有很多台服务器,我要一台台的往服务器上传sed.exe上去,这很麻烦
发表于 2013-1-8 08:43:00 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in (msg.txt) do (
  3. set "str=%%i"
  4. setlocal enabledelayedexpansion
  5. echo !str:3307=3306!>>msg1.txt
  6. del msg.txt /q&ren msg1.txt msg.txt
  7. endlocal
  8. )
复制代码
发表于 2013-1-8 09:07:53 | 显示全部楼层
回复 4# hijackle


第六行可以简化成:
  1. move /y msg1.txt msg.txt
复制代码
发表于 2013-1-8 09:09:31 | 显示全部楼层
回复 4# hijackle


    此方案的一个问题是,如果文件里面包含空行,那么会导致空行丢失。
 楼主| 发表于 2013-1-8 09:22:40 | 显示全部楼层
回复 6# BAT-VBS


    文件里面有很多空行,那这样写就有问题了
发表于 2013-1-8 09:43:43 | 显示全部楼层
还是考虑复杂点:

  1. @echo off
  2. for %%a in (a b c d e) do (
  3.   if "%%a" equ "a" (
  4.     (for /f "delims=" %%b in ('findstr /n .* %%a\msg.txt') do (
  5.       set "str=%%b"
  6.       setlocal enabledelayedexpansion
  7.       set "str=!str:*:=!"
  8.       if defined str set "str=!str:3307=3306!"
  9.       echo,!str!
  10.       endlocal
  11.    ))>$
  12.    move $ %%a\msg.txt
  13.   ) else (
  14.   copy /y a\msg.txt %%a\
  15. )
复制代码
 楼主| 发表于 2013-1-8 14:02:02 | 显示全部楼层
回复 8# batman


    可以了,谢谢
发表于 2023-1-21 12:18:13 | 显示全部楼层
大年30  各位老师好   我还在不断学习中    ,如果把这个题目改为4个不同的文件,且在同一文件下,替换4个文件中相同的内容,怎 么修改一下,谢谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:22 , Processed in 0.020913 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表