[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 zhou926 于 2013-1-8 14:01 编辑

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

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

  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

TOP

回复 2# BAT-VBS


    能不能用Windows系统内置的命令实现啊,因为有很多台服务器,我要一台台的往服务器上传sed.exe上去,这很麻烦

TOP

  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. )
复制代码

TOP

回复 4# hijackle


第六行可以简化成:
  1. move /y msg1.txt msg.txt
复制代码

TOP

回复 4# hijackle


    此方案的一个问题是,如果文件里面包含空行,那么会导致空行丢失。

TOP

回复 6# BAT-VBS


    文件里面有很多空行,那这样写就有问题了

TOP

还是考虑复杂点:
  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. )
复制代码
***共同提高***

TOP

回复 8# batman


    可以了,谢谢

TOP

大年30  各位老师好   我还在不断学习中    ,如果把这个题目改为4个不同的文件,且在同一文件下,替换4个文件中相同的内容,怎 么修改一下,谢谢!!!

TOP

返回列表