[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 编辑 ]

原帖由 随风 于 2010-4-21 23:07 发表
这种挤牙膏的提问方式真是可恶
要求多不要紧,关键是你要一次说完,幸好追加的要求对代码变动不大,否则真没人理你。
    )
    echo %%~nxa>>"temp\%%a"
)
start temp

老大这个是加到哪个地方?最后吗?
真的是超级完美了,超级感谢。
保证不会再挤了!

TOP

这种挤牙膏的提问方式真是可恶
要求多不要紧,关键是你要一次说完,幸好追加的要求对代码变动不大,否则真没人理你。
    )
    echo %%~nxa>>"temp\%%a"
)
start temp
技术问题请到论坛发帖求助!

TOP

回复 20楼 的帖子

有什么需求能否一次说完?

TOP

原帖由 随风 于 2010-4-21 20:22 发表
@echo off & setlocal enabledelayedexpansion
set #1=AAAA&set #2=BBBB&set #3=CCCC&set #4=DDDD
::下面设置各行的截取长度,从第一个字符开始
set /a h1=2,h2=3,h3=4,h4=5
if not exist temp\ md temp
for %%a ...


真的是太完美了。。。而且处理速度好快。
能否把文件名,复制到TXT内容的最后一行?
我是不要求太多了啊。呵呵,好像永远满足不了似的。
效果如下:
AAAA:444444444444444
BBBB:555555555555555
CCCC:666666666666666
DDDD:777777777777777
TXT文件名:谢谢啊

[ 本帖最后由 zzh106 于 2010-4-21 21:57 编辑 ]

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. set #1=AAAA&set #2=BBBB&set #3=CCCC&set #4=DDDD
  3. ::下面设置各行的截取长度,从第一个字符开始
  4. set /a h1=2,h2=3,h3=4,h4=5
  5. if not exist temp\ md temp
  6. for %%a in (*.txt) do (
  7.    set /a n=0
  8.    for /f "usebackq delims=" %%i in ("%%a") do (
  9.       set /a n+=1
  10.       set .!n!=%%i
  11.     )
  12.     set /a m=n-2,h=m-3,j=0
  13.     for /l %%j in (!h! 1 !m!) do (
  14.        set /a j+=1
  15.        for %%i in (!j!) do (
  16.           set var=!.%%j!
  17.           for %%y in (!h%%i!) do echo !#%%i!:!var:~0,%%y!>>"temp\%%a"
  18.         )
  19.     )
  20. )
  21. start temp
复制代码
技术问题请到论坛发帖求助!

TOP

加我QQ吧。
没改代码,怎把目录内的TXT都给删了

TOP

1,批处理要和需要处理的文本放在一个文件夹内
2,15楼的代码测试正常.如果你对原代码进行了修改,检查修改部分是否正确
3,如果还不行,贴出你运行的代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

找不到指定的文件啊。

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

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


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

TOP

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

TOP

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

TOP

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


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

TOP

回复 9楼 的帖子

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

TOP

返回列表