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

文件夹中有多个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 

我在做什么错误。

如果要使用通配符而不是文本文件集,请不要使用/F “set”和“file-set”的区别如下,从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 /?

在进入文件集中的下一个文件之前,打开,读取和处理每个文件。 处理包括读取文件,将其分解成单独的文本行,然后将每行parsing为零个或多个标记。 然后调用for循环的主体,将variables值设置为find的标记string。

这可能不是你想要的行为。 您可以添加一个tokens=*来获取单个variables中的所有标记。 我还添加了usebackq选项,以便在任何* .txt文件名包含空格的情况下,我们可以双引号文件集:

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