Board logo

标题: [文本处理] 批处理如何按指定格式输出多个txt文本的文件名和指定行? [打印本页]

作者: keathaly    时间: 2016-6-29 21:04     标题: 批处理如何按指定格式输出多个txt文本的文件名和指定行?

本帖最后由 pcl_test 于 2016-6-29 21:19 编辑

如有多个文本:
11.txt                     22.txt                   33.txt             ......
内容如下                  内容如下                内容如下
aa                          bb                       cc
frame                     frame                  frame
keyword=0             keyword=10        keyword=30
要求:将每个文本文件第3行内容以及相对应的文件名输出到新的文本(如aa.txt)
aa.txt内容要求为:
11   keyword=0
22   keyword=10
33   keyword=30
....
若能分两列输出到EXCEL表中更好
作者: jrx401    时间: 2016-6-29 22:37

菜鸟回复----》
如下不知道,是不是你想要的。
  1. @echo off
  2. echo ---------------------------------
  3. echo output row 3 to a new txt.
  4. echo ---------------------------------
  5. :: Step1, Catch all txt file and save to namelist.txt
  6. if exist namelist.txt del namelist.txt
  7. if exist namelist.lst del namelist.lst
  8. for %%i in (*.txt) do echo %%i>>namelist.lst
  9. cd.>namelist.txt
  10. for /f "tokens=1,2  delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
  11. del namelist.lst
  12. :: Step2, output row 3 to a new txt.
  13. cd.>aa.txt
  14. setlocal enabledelayedexpansion
  15. for /f %%C in (namelist.txt) do (
  16.         set n=0
  17.         for /f "delims=" %%b in (%%C.txt) do (
  18.             set /a n=n+1
  19.             if "!n!"=="3" echo %%C %%b>>aa.txt
  20. )
  21. )
  22. del namelist.txt
  23. pause
复制代码

作者: keathaly    时间: 2016-6-29 23:04

回复 2# jrx401 试了下,目的达到了 :victory: :victory: ,thank you!
作者: GNU    时间: 2016-6-29 23:06

  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     set /p =%%~ni,<nul
  4.     findstr "keyword=" "%%i"
  5. ))>aa.csv
复制代码

作者: pcl_test    时间: 2016-6-29 23:08

  1. @echo off
  2. (for %%a in (*.txt) do (
  3.     call :getline "%%a"
  4. ))>"结果.csv"
  5. pause&exit
  6. :getline
  7. for /f "skip=2 delims=" %%b in ('type "%~1"') do echo;%~n1,%%b&goto :eof
复制代码

作者: GNU    时间: 2016-6-29 23:11

回复 2# jrx401


没有必要单独生成namelist.txt这个文件,直接写在第16行的for循环里面就行了:
for /f "delims=" %%C in ('dir /b /a-d *.txt') do (
后面去掉扩展名可以用 %%~nC
作者: jrx401    时间: 2016-6-29 23:17

本帖最后由 pcl_test 于 2016-6-29 23:53 编辑

回复 6# GNU

    感谢指点, 果然不错。
  1. @echo off
  2. echo ---------------------------------
  3. echo output row 3 to a new txt.
  4. echo --------------------------------
  5. :: Step2, output row 3 to a new txt.
  6. ::cd.>aa.txt
  7. setlocal enabledelayedexpansion
  8. for /f %%C in ('dir /b /a-d *.txt') do (
  9.         set n=0
  10.         for /f "delims=" %%b in (%%C) do (
  11.             set /a n=n+1
  12.             if "!n!"=="3" echo %%C %%b>>aa.txt
  13. )
  14. )
  15. pause
复制代码

作者: jrx401    时间: 2016-6-29 23:21

回复  jrx401


没有必要单独生成namelist.txt这个文件,直接写在第16行的for循环里面就行了:
for /f ...
GNU 发表于 2016-6-29 23:11



    但是不知道 [后面去掉扩展名可以用 %%~nC]
     这个怎样改。 可否再详细说明?
作者: GNU    时间: 2016-6-29 23:23

回复 7# jrx401


    这种写法不能处理文件名包含空格的情况,你再试试吧。
作者: GNU    时间: 2016-6-29 23:29

回复 8# jrx401
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.     set n=0
  5.     for /f "delims=" %%j in ('type "%%i"') do (
  6.         set /a n+=1
  7.         if "!n!"=="3" (
  8.             echo %%~ni,%%j
  9.         )
  10.     )
  11. ))>aa.csv
复制代码

作者: pcl_test    时间: 2016-6-29 23:52

回复 8# jrx401


    指定回应某楼层的在相应楼层点回复,少引用
作者: jrx401    时间: 2016-6-30 08:35

回复 11# pcl_test


    了解




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