遍历特定路径中的所有文本文件,并检查第二行是否有值

时间:2017-04-20 12:09:49

标签: batch-file

测试特定路径中的文本文件中哪一个在其第二行包含值,并使用Windows批处理文件将文件名保存到另一个文本文件。

到目前为止,这就是我所做的。

@echo off
setlocal ENABLEDELAYEDEXPANSION
SET COUNT=0

FOR %%A IN (C:\Users\mark.jim.a.mercado\Desktop\*.txt) DO ( 

ECHO %%A 
)
pause

它将列出我使用的目录中的所有文本文件,但是当我尝试将其名称保存到另一个文本文件时(使用下面的代码),只会保存最后一个文本文件的名称。

@echo off
setlocal ENABLEDELAYEDEXPANSION
SET COUNT=0

FOR %%A IN (C:\Users\mark.jim.a.mercado\Desktop\*.txt) DO ( 

ECHO %%A @echo off
setlocal ENABLEDELAYEDEXPANSION
SET COUNT=0

FOR %%A IN (C:\Users\mark.jim.a.mercado\Desktop\*.txt) DO ( 

ECHO %%A >C:\Users\mark.jim.a.mercado\Desktop\names.txt
)
pause

2 个答案:

答案 0 :(得分:0)

你不能说出要寻找的价值。 IMO最简单的方法是使用findstr对行进行编号,使用另一个管道的findstr来过滤:2:又名第二行(如果存在)

假设有三个文件:one.txt two.txt,three.txt具有类似的行数和内容:

> type *.txt
one.txt
one

two.txt
one
two

three.txt
one
two
three

这批:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
For /f "tokens=1,2* delims=:" %%A in (
  'findstr /N "^" *.txt ^|findstr ":2:"'
) Do Echo File:%%A Line:%%B Value:%%C 

将结束:

File:two.txt Line:2 Value:two
File:three.txt Line:2 Value:two

答案 1 :(得分:0)

我认为检索每个文本文件第二行的最简单方法是input redirection <

> ".\logfile.log" (
    for %%F in (".\*.txt") do (
        set "FILE=%%~F"
        setlocal EnableDelayedExpansion
        < "!FILE!" (
            for /L %%I in (1,1,2) do (
                set "LINE=" & set /P LINE=""
            )
            echo 2nd line of "!FILE!": "!LINE!"
        )
        endlocal
    )
)

由于你没有告诉我们你想用第二行做什么或者你想如何过滤它们,所以提供更多的帮助是不可能的......