Board logo

标题: [文本处理] 批处理如何将多个文本第一行中的指定字符串替换成其他的字符串 [打印本页]

作者: ggwwhh    时间: 2008-8-31 22:09     标题: 批处理如何将多个文本第一行中的指定字符串替换成其他的字符串

本帖最后由 pcl_test 于 2016-8-8 14:44 编辑

比较烦琐的文本替换问题
对一个文件夹下的所有txt文本文件的第一行的000替换为555。。。并生成新文件(相当与另存为)。。。则文件名改为在原先文件名后加被替换的字


例:有一文件名为 QQQ 第一行为6543213100054553把其中的000替换为555。。。则新生成的文件名则改为QQQ555。。。。。。。批量对整个目录下的文件进行处理。。。。。



补充:是不是对大文本文件处理起来比较慢的啊。。。(希望几秒就搞定)



THANKS
作者: pusofalse    时间: 2008-8-31 22:44

比较慢,批处理是一批一批来操作,而不是一个一个来。。
还是不大明白意思,新生成的QQQ555中的内容是什么?
作者: batman    时间: 2008-8-31 23:18

是不是这样的假设要处理的文件在d:\test下,新生成的文件在d:\new下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /s /b d:\test\*.txt') do (
  3.         for /f "usebackq delims=" %%i in ("%%a") do (
  4.              if not defined flag (
  5.                 set "str=%%i"&set "str=!str:000=555!"
  6.                 echo !str!>"d:\new\%%~na!str!.txt"&set "flag=a"
  7.                 ) else (
  8.                echo %%i>>"d:\new\%%~na!str!.txt"
  9.             )
  10.       )
  11.      set "flag="
  12. )
  13. echo 搞定。&pause>nul  
复制代码

作者: Batcher    时间: 2008-9-1 00:03

没有测试环境,不知这样对大文本文件能否满足“几秒就搞定”的要求:
  1. @echo off
  2. for %%a in (*.txt) do (
  3.   move /y "%%a" "%%~na555%%~xa"
  4.   change "%%~na555%%~xa" /from "000" /to "555" /lines "1-1"
  5. )
复制代码
文本修改工具change.exe
http://bbs.bathome.net/viewthread.php?tid=1685
作者: ggwwhh    时间: 2008-9-1 22:09

就在当前目录下生成。。。。。







大文件就是这个文件超过1M。。。内容很多。。。替换起来会不会慢。。。



就只要替换第一行哦
作者: Batcher    时间: 2008-9-1 22:26

原来只有1M啊,我还以为多大呢。
替换起来会不会慢,自己试试不就知道了?
看过3、4楼的代码以后,你认为他们的代码是只替换第一行?还是替换所有行?
作者: ggwwhh    时间: 2008-9-3 21:28

哪位高秀能再完善1下吗。。。
作者: Batcher    时间: 2008-9-3 22:00

你想完善哪个?
你觉得哪里不够完善?
作者: ggwwhh    时间: 2008-9-3 22:07

就是在当前目录下生成啊。。。。flag 是什么意思啊
作者: terse    时间: 2008-9-4 00:07

这样是否提升点效率
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do call:lp "%%i"
  3. pause&exit
  4. :lp
  5. for /f "usebackq delims=" %%i in (%1) do (
  6.      if not defined str (
  7.      set str=%%i&set "str=!str:000=555!"
  8.      echo !str!>"%~dpn1555%~x1") else more/e +1 %1>>"%~dpn1555%~x1"&set str=&goto :eof
  9.      ))
复制代码





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