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

[文本处理] 批处理替换文本里的指定内容并复制文本到指定文件夹

[复制链接]
发表于 2009-11-21 21:48:01 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2018-3-19 22:38 编辑

目的:向目录中(包括所有的子目录)复制网页文件。网页文件中的“北京”两个字要根据目录的拼音名字替换成相应地名。如目录名要是"shanghai"就把要复制进的网页文件中的“北京”改成“上海”然后再复制进"shanghai"这个目录中。
我的思路是先建一个txt文件格式是:shanghai 上海。   用这个txt文件作一个翻译工作。
我把thml文件先改成txt的文件
代码是这样:
@echo off
setLocal enabLedeLayedexpansion
for /f "delims=" %%i in ('dir /ad-h /b /s') do (
   for /f "tokens=1,2 delims= " %%a in (字典.txt) do (         
      if %%~ni==%%a (
         set "ke=%%b"                                                
         for %%l in (1.txt 2.txt 3.txt) do (            
             for /f "delims=" %%o in (%%l) do (
                 set "wang=%%o"
                 call set wang=%%wang:北京=!ke!%%
                 echo !wang!>>1%%l
             )              
             move 1%%l %%i\
             ren %%i\1%%l %%~nl.html            
         )
      )
   )
)
pause
exit
网页的txt中是这样:
^<html^>
^<head^>
^<title^>北京站^</title^>
^</head^>
^<body^>
^<p^>北京你好1^<b^> 我们在北京^</b^>^</p^>
^</body^>
^</html^>
翻译作用的txt文件中:
dalian 大连
shanhai 上海


我遇到的问题是目录子目录很多有两万多个,网页有十多个,我写的代码,我的朋友试用时很慢,据他说一天才完成了三分之一,(他能等一天我真佩服)
请朋友们说一下效率高的方法。
发表于 2009-11-21 22:08:38 | 显示全部楼层
1、改成for /r试试
2、不要用到call,用for来替换call set
3、地名不多就最好用变量来存贮
4、不要move,先copy再替换字符
5、量太大最好用其他工具

[ 本帖最后由 batman 于 2009-11-21 22:16 编辑 ]
发表于 2009-11-21 23:02:45 | 显示全部楼层
还没有时间试,楼主自己先搞几个目录试过再用
必须保证字典.txt中包含所有目录对应的翻译,否则复制进去的文件中:“北京”也会被去掉


  1. @echo off&setLocal enabLedeLayedexpansion
  2. for /f "tokens=1,2" %%a in (字典.txt) do (set %%a=%%b)

  3. for /f "delims=" %%a in ('dir /ad-h /b /s') do (
  4.      for %%z in ("!%%~na!") do (
  5.          for %%b in (1.txt 2.txt 3.txt) do (
  6.   (
  7.                for /f "delims=" %%c in (%%b) do (
  8.                    set str=%%c
  9.                    echo;!str:北京=%%~z!
  10.                )
  11.    )>%%a\%%~nb.html
  12.          )
  13.      )
  14. )

  15. pause
复制代码
 楼主| 发表于 2009-11-22 06:09:14 | 显示全部楼层
非常感谢
地名有一千多个,是否适合使用变量?
sed.exe是不是能解决这个问题?

[ 本帖最后由 浅默 于 2009-11-22 06:12 编辑 ]
发表于 2009-11-22 09:36:35 | 显示全部楼层

回复 4楼 的帖子

一千个地名用变量是没有问题的,
sed就是为干这事而生滴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:31 , Processed in 0.010929 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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