我有超过一百个像这样格式化的文本文件
<TITLE> This is the title
<SUBJECT> This is the subject
<XTITLE>
我想使用Windows批处理文件提取标题值,例如“这是从每个文本文件到单个输出文件的标题”,还包括找到这些文件的文本文件名。每个文本文件可以有多个标题标签。以下示例输出:
这是标题textfile1.txt这是第二个标题textfile1.txt
这是第三个标题textfile2.txt
这是第四个标题textfile3.txt
任何?
答案 0 :(得分:2)
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "delims=" %%i IN ('dir /b/a-d "%sourcedir%\*.txt"') DO (
FOR /f "usebackqtokens=1-3delims=<=>" %%a IN ("%sourcedir%\%%i") DO (
IF "%%b"=="TITLE" ECHO(%%i %%c
IF "%%a"=="TITLE" ECHO(%%i %%b
)
)
)>"%outfile%"
GOTO :EOF
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
生成定义为%outfile%
的文件如果没有前导空格,则会调用if...%%a
行;如果有前导空格,则会调用if...%%b
。
我改变了报告字段的顺序,因为这似乎对我更有意义。如果您确实希望报告的顺序相反,只需撤消%%i
语句中的%%a/%%b
和echo
。
此例程为每个输入文件生成一行。
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "delims=" %%i IN ('dir /s/b/a-d "%sourcedir%\*.txt"') DO (
FOR /f "usebackqtokens=1-3delims=<=>" %%a IN ("%%i") DO (
IF "%%b"=="TITLE" ECHO(%%i %%c
IF "%%a"=="TITLE" ECHO(%%i %%b
)
)
)>"%outfile%"
GOTO :EOF
调整相同的例程以包括子目录的扫描。请注意,在这种情况下,dir /s /b
包含商品详情中的路径。
如果路径/文件名中包含分隔符,您可能希望将echo
ed %%i
放在引号中。
答案 1 :(得分:1)
@echo off
pushd "c:\folder_with_files"
for %%# in (textfile*.txt) do (
for /f "tokens=1* delims=>" %%a in ('find "<SUBJECT>" "%%#"') do (
if "%%b" neq "" (
echo %%b : file %%#
)
)
)>>"c:\output.txt"
您可能需要在第一个for循环中更改文件的掩码,并且需要更改PUSHD位置
答案 2 :(得分:0)
此方法应该运行得更快,特别是如果文件很大:
@echo off
setlocal EnableDelayedExpansion
rem Group titles of same files in same array elements
for /F "tokens=1,3 delims=:>" %%a in ('findstr /L "<TITLE>" *.txt') do (
set "t[%%a]=!t[%%a]! %%b"
)
rem Show the titles
(for /F "tokens=2,3 delims=[]=" %%a in ('set t[') do echo %%~Fa: %%b) > output.txt
例如,使用这些输入文件:
<强> textfile1.txt 强>
<TITLE> This is the title
<SUBJECT> This is the subject
<XTITLE>
<TITLE> This is the second title
<SUBJECT> This is the subject
<XTITLE>
<强> textfile2.txt 强>
<TITLE> This is the third title
<SUBJECT> This is the subject
<XTITLE>
<强> textfile3.txt 强>
<TITLE> Fourth title
<SUBJECT> This is the subject
<XTITLE>
<TITLE> Fifth title
<SUBJECT> This is the subject
<XTITLE>
<TITLE> Sixth title
<SUBJECT> This is the subject
<XTITLE>
这是输出:
C:\Folder\textfile1.txt: This is the title This is the second title
C:\Folder\textfile2.txt: This is the third title
C:\Folder\textfile3.txt: Fourth title Fifth title Sixth title