Batch

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

  • May 17, 2013

一個文件夾中有多個txt文件。現在我想打開所有 txt 文件並將內容列印到單個 txt 文件中。條件是,我想跳過每個 txt 文件的前兩行。我正在嘗試使用以下命令,但失敗了。

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

顯示錯誤

The system cannot find the file *.*.

如果我使用(.)or(%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請在外部環繞 a:

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
   )  
)

引用自:https://serverfault.com/questions/508583