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