Board logo

标题: [文本处理] [已解决]批处理怎样批量替换文件夹中的txt中的文字? [打印本页]

作者: gung    时间: 2011-5-18 14:12     标题: [已解决]批处理怎样批量替换文件夹中的txt中的文字?

本帖最后由 gung 于 2011-5-23 17:15 编辑

1、一个文件夹下很多txt文档  f:/wenjianjia/2、每个文档中的a后面,the后面,this后面的第一个单词都替换为我想替换的词
   例如:a bag,a dog,a ..都替换为a shoes;而the bag,the dog,the ..都替换为the cloth;

3、如果够厉害,考虑这个问题:每个txt文档最多在替换10次之后,就不再替换了

各位大侠们帮帮忙了 :>
作者: batman    时间: 2011-5-18 20:55

本帖最后由 batman 于 2011-5-18 21:02 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "a=shoes"&set "the=colth"
  3. for /r f:\wenjianjia\2 %%a in (*.txt) do (
  4.      set /a n=0
  5.     (for /f "usebackq delims=" %%b in ("%%a") do (
  6.           set "str="&set "flag="
  7.           for %%c in (%%b) do (
  8.                if !n! geq 10 set "flag="
  9.                if defined flag (
  10.                   set "str=!str! !flag!"&set "flag="&set /a n+=1
  11.                   ) else (
  12.                   set "str=!str! %%c"
  13.                )
  14.                if defined %%c set "flag=!%%c!"
  15.          )
  16.          echo !str!
  17.     ))>$
  18.     move /y $ "%%a"
  19. )
  20. del /q $               
复制代码

作者: CrLf    时间: 2011-5-18 23:12

本帖最后由 zm900612 于 2011-5-18 23:18 编辑

用变量替换+for实现精确定位字符串...
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%1 in (*.txt) do (
  3.    (for /f "delims=" %%2 in (%%~s1) do (
  4.       set str=%%2 @
  5.       for %%A in ("a=shoes" "the=cloth") do (
  6.          set tmp=!str!&set str=
  7.          for /f "tokens=1* delims==" %%B in ("%%~A") do (
  8.             for /l %%D in (1 1 10) do (
  9.                if defined tmp (
  10.                   if "!tmp: %%B =!" neq "!tmp!" (
  11.                      for /f "tokens=1*" %%a in ("!tmp:* %%B =!") do (
  12.                         set str=!str!!tmp:%%a %%b=!%%C
  13.                         if "%%b"=="" set str=!str:~0,-6!
  14.                         set tmp= %%b
  15.                      )  
  16.    rem 核心代码,利用tokens+变量通配替换,准确定位所有目标字符串的位置。其他部分太琐碎,我不知道该怎么解释...
  17.                   ) else if %%D==10 set str=!str!!tmp!
  18.                )
  19.             )
  20.          )
  21.       )
  22.    echo !str:~0,-2!
  23.    ))>$
  24.    move $ "%%1"
  25. )>nul
  26. pause
复制代码
写完才发现似乎绕弯子了
作者: gung    时间: 2011-5-23 16:07

@echo off&setlocal enabledelayedexpansion
set "a=shoes"&set "the=colth"
for /r f:\wenjianjia\2 %%a in (*.txt) do (
     set /a n=0
    (for /f "usebackq delims=" %%b in ("%%a") do (
          s ...
batman 发表于 2011-5-18 20:55

感谢! 这个很不错




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