使用 FOR /F 命令解析文件夹中的所有文本文件

使用 FOR /F 命令解析文件夹中的所有文本文件

文件夹中有许多 txt 文件。现在我想打开所有 txt 文件并将内容打印到单个 txt 文件中。条件是,我想跳过每个 txt 文件的前两行。我尝试使用以下命令,但失败了。

For /F "skip=2" %H IN (*.*) Do echo %H  1>>Content.txt

错误显示

The system cannot find the file *.*.

如果我使用(.)(%1)代替 ,也会发生同样的情况(*.*)

但如果我提到文件名,那么它就起作用了

For /F "skip=2" %H IN (aa.txt ab.txt ac.txt) Do echo %H  1>>Content.txt

我犯了什么错误。

答案1

如果您想使用通配符而不是文字文件集,请不要使用/F。“集”和“文件集”的区别如下,来自FOR /?

FOR %variable IN (set) DO command [command-parameters]
...
(set)      Specifies a set of one or more files.  Wildcards may be used.

相对

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
...
file-set is one or more file names. [note: no mention of wildcards]

如果要将所有 *.txt 文件全部打包,则FOR在外面包裹一个:

FOR %A IN ( *.txt ) DO (
    FOR /F "skip=2" %H IN ( %A ) DO (
        ECHO %H 1>>Content.txt
    )
)

请注意,您的For /F "skip=2" %H循环将一次读取一个文件,然后使用空格或制表符作为分隔符将该行拆分为单个标记。另见FOR /?

在处理文件集中的下一个文件之前,每个文件都会被打开、读取和处理。处理包括读取文件、将其分解为单独的文本行,然后将每行解析为零个或多个标记。然后调用 for 循环体,并将变量值设置为找到的标记字符串。

这可能不是您想要的行为。您可以添加一个tokens=*来抓取单个变量中的所有标记。我还添加了选项,usebackq以便我们可以对文件集进行双引号处理,以防任何 *.txt 文件名包含空格:

FOR %A IN ( *.txt ) DO (
    FOR /F "tokens=* usebackq skip=2" %H IN ( "%A" ) DO (
        ECHO %H 1>>Content.txt
    )  
)

相关内容