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

[文本处理] 批处理怎样批量截取并追加同目录下的多个TXT文件的内容?

第一次提问,没看版规,不敢要求太多,
发现高手如云,就把我的想法及要求一次给说出来,麻烦给做一下。

批量操作文本内容的指定行往上的4行内容并以原文件名保存
不需要生成备份,最主要就是不能把文件名给改了,还是保存到原来的那个文件名里面,
然后再给这四行的内容的前面追加对应的字符
具体效果如下:
原始文本内容如下
格式为ANSI,就是数字和英文字符,无中文,倒数上来的那6行内无空行。
.......
.......
........上面有很多行....
000000000000000   
111111111111111   
222222222222222   
333333333333333   
444444444444444   
555555555555555   
666666666666666   
777777777777777   
888888888888888   
999999999999999   
                  
截取倒数第二行以上的四行文本内容,
再在第一行内容添加:AAAA:                  
       第二行内容添加:BBBB:                  
       第三行内容添加:CCCC:
       第四行内容添加:EEEE:
AAAA:444444444444444
BBBB:555555555555555
CCCC:666666666666666
DDDD:777777777777777
就是想得到上面的这个内容。

再加一点要求,就是截取的这四行,每行截取的长度要是都可设置就完美了。(这四行分别截取N1 ,N2, N3, N4字符)最后再把TXT的名件名(不要复扩展名)复制到最后一行。

比如下面这样的效果:

AAAA:4444444444 (N1)
BBBB:555555555555 (N2)
CCCC:666666666666  (N3)
DDDD:7777777777777  (N4)

TXT文件名

[ 本帖最后由 zzh106 于 2010-4-22 11:23 编辑 ]

1,版规是要看滴
2,你没说明文本的编码类型和是否含或含什么样的敏感字符?
3,你没说明是否保留空行
4,你没说明是否直接对原文件进行修改
5,批量操作,是不是有多个文本要这样操作?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

1,刚又看了一遍
2.编码类型是ANSI,内容就是普通的数字,英文,无敏感字符,中文都没有。
3.“那4行都是有字的,没空行
4,可以直接对文件修改,反正我是有备份的,文件名不动,
5。批量操作,目录下的所有TXT文件,不止一个。
谢谢。

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. set #1=AAAA&set #2=BBBB&set #3=CCCC&set #4=DDDD
  3. if not exist temp\ md temp
  4. for %%a in (*.txt) do (
  5.    set /a n=0
  6.    for /f "usebackq delims=" %%i in ("%%a") do (
  7.       set /a n+=1
  8.       set .!n!=%%i
  9.     )
  10.     set /a m=n-2,h=m-3,j=0
  11.     for /l %%j in (!h! 1 !m!) do (
  12.        set /a j+=1
  13.        for %%i in (!j!) do echo !#%%i! !.%%j!>>"temp\%%a"
  14.     )
  15. )
  16. start temp
复制代码
技术问题请到论坛发帖求助!

TOP

行首不为:时
  1. @echo off&setlocal enabledelayedexpansion
  2. set "h_1=AAAA:"&set "h_2=BBBB:"&set "h_3=CCCC:"&set "h_4=DDDD:"
  3. for %%i in (*.txt) do (for /f %%j in ('find /c /v "" ^<"%%i"') do set/a a=%%j-6,b=%%j-2,c=0
  4. for /f "tokens=1* delims=:" %%j in ('findstr /n .* "%%i"') do if %%j gtr !a! if %%j leq !b! set/a c+=1&>>"%%i.h" call echo.%%h_!c!%%%%k
  5. del /q "%%i"
  6. ren "%%i.h" "%%i")
复制代码

汗,这圈子让我绕的

[ 本帖最后由 hanyeguxing 于 2010-4-21 16:08 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "h_1=AAAA:"&set "h_2=BBBB:"&set "h_3=CCCC:"&set "h_4=DDDD:"
  3. for %%i in (*.txt) do (for /f %%j in ('find /c /v "" ^<"%%i"') do set/a a=%%j-6,b=%%j-2,c=0,d=0
  4. for /f "usebackq delims=" %%j in ("%%i") do set/a d+=1&if !d! gtr !a! if !d! leq !b! set/a c+=1&>>"%%i.h" call echo.%%h_!c!%%%%j
  5. del /q "%%i"
  6. ren "%%i.h" "%%i")
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-21 16:20 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 随风 于 2010-4-21 15:43 发表
@echo off & setlocal enabledelayedexpansion
set #1=AAAA&set #2=BBBB&set #3=CCCC&set #4=DDDD
if not exist temp\ md temp
for %%a in (*.txt) do (
   set /a n=0
   for /f "usebackq delims=" %%i in (" ...

感谢感谢!
刚运行了一下,就是AAAA,BBBB,CCCC,DDDD后面多了一个空格,其它都正常
而且自动生成一个TEMP的目录,真好!

TOP

原帖由 hanyeguxing 于 2010-4-21 16:02 发表
行首不为:时@echo off&setlocal enabledelayedexpansion
set "h_1=AAAA:"&set "h_2=BBBB:"&set "h_3=CCCC:"&set "h_4=DDDD:"
for %%i in (*.txt) do (for /f %%j in ('find /c /v "" ^>"%%i.h" call echo.%%h_!c!% ...


谢谢。达到预期效果。

TOP

空格是特意加的,为了方便检查
你自己改下就行了
echo !#%%i! !.%%j!>>"temp\%%a"
改为
echo !#%%i!!.%%j!>>"temp\%%a"
最初思路和 寒夜孤星 的一样,用 find 先获取总行数,但楼主要求是批量处理,且又以声明无空行,考虑效率问题,还是放弃了 find
另:能给 孤星 兄提个建议么?
以后写代码能否也讲究下书写格式,方便阅读啊,这样看你代码真有点累哦 ^_^
技术问题请到论坛发帖求助!

TOP

回复 9楼 的帖子

陋习马上就改,嘿嘿...
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 随风 于 2010-4-21 16:45 发表
空格是特意加的,为了方便检查
你自己改下就行了
echo !#%%i! !.%%j!>>"temp\%%a"
改为
echo !#%%i!!.%%j!>>"temp\%%a"
最初思路和 寒夜孤星 的一样,用 find 先获取总行数,但楼主要求是批量处理,且又以声明无 ...


AAAA:  BBBB:后面都没有内容了啊

TOP

我把难度又提高了些,麻烦二位老大,再给看盾

TOP

但你没说这四行要求截取的长度是多少啊?
ps:表用红色字体!重点内容加粗就可以了
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2010-4-21 17:25 发表
但你没说这四行要求截取的长度是多少啊?
ps:表用红色字体!重点内容加粗就可以了


我想要活动的,想截多长就多长。
直接在BAT里面改一下就OK的那种。
这样是不要线好多圈啊

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. ::下面设置各行前添加的内容
  3. set "han_1=AAAA:"&set "han_2=BBBB:"&set "han_3=CCCC:"&set "han_4=DDDD:"
  4. ::下面设置各行的截取长度,从第一个字符开始
  5. set/a ye_1=4,ye_2=5,ye_3=3,ye_4=2
  6. for %%i in (*.txt) do (
  7. for /f %%j in ('find /c /v "" ^<"%%i"') do set/a a=%%j-6,b=%%j-2,c=0,d=0
  8. for /f "usebackq delims=" %%j in ("%%i") do (
  9. set "e=%%j"
  10. set/a d+=1
  11. if !d! gtr !a! if !d! leq !b! (
  12. set/a c+=1
  13. call set f=%%ye_!c!%%
  14. >>"%%i.h" call echo.%%han_!c!%%%%e:~0^,!f!%%
  15. )
  16. )
  17. del /q "%%i"
  18. ren "%%i.h" "%%i"
  19. )
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表