标题: [文本处理] 批处理如何按指定格式输出多个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
菜鸟回复----》
如下不知道,是不是你想要的。- @echo off
- echo ---------------------------------
- echo output row 3 to a new txt.
- echo ---------------------------------
- :: Step1, Catch all txt file and save to namelist.txt
- if exist namelist.txt del namelist.txt
- if exist namelist.lst del namelist.lst
- for %%i in (*.txt) do echo %%i>>namelist.lst
- cd.>namelist.txt
- for /f "tokens=1,2 delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
- del namelist.lst
-
- :: Step2, output row 3 to a new txt.
- cd.>aa.txt
- setlocal enabledelayedexpansion
- for /f %%C in (namelist.txt) do (
- set n=0
- for /f "delims=" %%b in (%%C.txt) do (
- set /a n=n+1
- if "!n!"=="3" echo %%C %%b>>aa.txt
- )
- )
-
- del namelist.txt
- pause
复制代码
作者: keathaly 时间: 2016-6-29 23:04
回复 2# jrx401 试了下,目的达到了 :victory: :victory: ,thank you!
作者: GNU 时间: 2016-6-29 23:06
- @echo off
- (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- set /p =%%~ni,<nul
- findstr "keyword=" "%%i"
- ))>aa.csv
复制代码
作者: pcl_test 时间: 2016-6-29 23:08
- @echo off
- (for %%a in (*.txt) do (
- call :getline "%%a"
- ))>"结果.csv"
- pause&exit
- :getline
- 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
感谢指点, 果然不错。- @echo off
- echo ---------------------------------
- echo output row 3 to a new txt.
- echo --------------------------------
-
- :: Step2, output row 3 to a new txt.
- ::cd.>aa.txt
- setlocal enabledelayedexpansion
- for /f %%C in ('dir /b /a-d *.txt') do (
- set n=0
- for /f "delims=" %%b in (%%C) do (
- set /a n=n+1
- if "!n!"=="3" echo %%C %%b>>aa.txt
- )
- )
- 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 - @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- set n=0
- for /f "delims=" %%j in ('type "%%i"') do (
- set /a n+=1
- if "!n!"=="3" (
- echo %%~ni,%%j
- )
- )
- ))>aa.csv
复制代码
作者: pcl_test 时间: 2016-6-29 23:52
回复 8# jrx401
指定回应某楼层的在相应楼层点回复,少引用
作者: jrx401 时间: 2016-6-30 08:35
回复 11# pcl_test
了解
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |