Board logo

标题: [文本处理] [已解决]批处理替换文本里的内容都是一行行的换,有什么办法让他快起来吗? [打印本页]

作者: miqilaosu    时间: 2019-5-19 10:01     标题: [已解决]批处理替换文本里的内容都是一行行的换,有什么办法让他快起来吗?

  1. cd /d %~dp0
  2. setlocal enabledelayedexpansion
  3. set strNew=
  4. for /f "delims=*" %%m in ('type "C:\1.txt"') do (
  5. for /f "delims=*" %%a in ('dir/b/s *.htm *.txt') do (
  6. for /f "delims=*" %%i in ('type "%%a"') do (
  7. set var=%%i
  8. set "var=!var:%%m=%strNew%!"
  9. if defined var (
  10. echo !var!!>>%%a.bk
  11. )
  12. )
  13. move "%%a.bk" "%%a"
  14. )
  15. )
复制代码
我是想用C:\1.txt里每一换去替换 当前文件夹*.htm *.txt的所有文件里的内容 但是需要每一行去替换太慢了,有没有快点的方法呢
作者: amwfjhh    时间: 2019-5-19 11:30

将echo后面的空格换为,或者.即可
作者: miqilaosu    时间: 2019-5-19 11:36

回复 2# amwfjhh


    主要是不知道改哪里
因为把单个行给变量了,只有单个行空的时候报这个错,可我不知道怎么改了
作者: zaqmlp    时间: 2019-5-19 12:06

单发错误的代码,又没说原本的问题,谁知道你要干嘛
作者: miqilaosu    时间: 2019-5-19 12:34

回复 4# zaqmlp
主要是去掉这个错误变成空就行
作者: zaqmlp    时间: 2019-5-19 12:44

回复 5# miqilaosu
echo空格 改成 echo;
作者: amwfjhh    时间: 2019-5-19 13:03

回复 3# miqilaosu


    就是因为单行空,未有输出信息,就你直接输入一个ECHO回车是一个效果,解决就是后面跟个,或点,将echo命令的分割符由空格变为这两个字符,就可以正常输出空行了。
作者: miqilaosu    时间: 2019-5-19 13:30

本帖最后由 miqilaosu 于 2019-5-19 13:53 编辑

谢谢客位指导终于想明白了空行我不执行就行了,进入了误区
cd /d %~dp0
setlocal enabledelayedexpansion
set strNew=
for /f "delims=*" %%m in ('type "C:\1.txt"') do (
for /f "delims=*" %%a in ('dir/b/s *.htm *.txt') do (
for /f "delims=*" %%i in ('type "%%a"') do (
set var=%%i
set "var=!var:%%m=%strNew%!"
if defined var (
echo !var!!>>%%a.bk
)
)
move "%%a.bk" "%%a"
)
)
作者: amwfjhh    时间: 2019-5-19 13:49

你这个帖子设置有问题,所有回复仅楼主可见,可能你回复别人了,但是居然看不到回复自己的内容
作者: miqilaosu    时间: 2019-5-19 14:56

回复 9# amwfjhh

之前的问题解决了,但是发现批处理一行行替换太慢了,有没有什么快速的方法替换呢
作者: amwfjhh    时间: 2019-5-19 15:31

回复 10# miqilaosu


    查下sed工具及其用法吧。
作者: zaqmlp    时间: 2019-5-19 15:35

回复 10# miqilaosu

赞助下吧,我帮你写个
作者: Batcher    时间: 2019-5-19 17:42

回复 8# miqilaosu
  1. @echo off
  2. cd /d %~dp0
  3. setlocal enabledelayedexpansion
  4. set strNew=
  5. for /f "delims=*" %%m in ('type "C:\1.txt"') do (
  6.     for /f "delims=*" %%a in ('dir /b /s *.htm *.txt') do (
  7.         (for /f "delims=*" %%i in ('type "%%a"') do (
  8.             set var=%%i
  9.             set "var=!var:%%m=%strNew%!"
  10.             if defined var (
  11.                 echo,!var!!
  12.             )
  13.         ))>"%%a.bk"
  14.         move "%%a.bk" "%%a"
  15.     )
  16. )
复制代码
把重定向操作放在外面可以提交效率。
如果希望进一步加速,请举例说明你想如何替换文本内容。
作者: miqilaosu    时间: 2019-5-20 09:29

本帖最后由 miqilaosu 于 2019-5-20 09:35 编辑

回复 13# Batcher


    谢谢@Batcher大神,好利害,一下快了几十倍,原来还可以这样写,又学到了一种方法,以前跟本没想过还可以用ECHO连续输出,最后写到TXT里
我是想批量替换同一目录下的网站模板代码内容(比如当前页源码),都是html,txt文件,
作者: amwfjhh    时间: 2019-5-21 09:28

批处理里面输出是挺费时的。




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