我有很多文本文件。在那些文件中,只有幾行感興趣。我雖然認爲Batch能夠有效地處理我的問題,所以我花了最近兩天的時間來學習該語言的基礎知識。 基本上我想通過我所有的文件(爲了簡單起見,它們在同一個文件夾中),提取我需要的幾行文件,並將它們複製到輸出文件的一行中。在多個文本文件中提取一些行
到目前爲止,我對管理:
摘自每一個文件中的所有行同一個輸出文件
FOR %%f IN (*.whl) DO FOR /F "delims=|" %%l in (%%f) DO echo %%l >> output.txt
從一個文件中提取(5和10)我想行
(FOR /L %%i IN (1,1,5) DO SET /P line1=) < file.txt
(FOR /L %%i IN (1,1,10) DO SET /P line2=) < file.txt
>> output.txt ECHO %line1% %line2%
現在我試圖結合這兩個代碼:
該代碼給我的公司第一個文件的rect輸出,但不循環所有文件。如果我在:extract_lines
塊的末尾添加goto nxt_file
它只是再次執行第一個文件。
:nxt_file
FOR %%f IN (*.whl) DO (
set outfile=%%f
goto extract_lines)
:extract_lines
(FOR /L %%i IN (1,1,5) DO SET /P line1=) < %file%
(FOR /L %%i IN (1,1,10) DO SET /P line2=) < %file%
>> output.txt ECHO %line1% %line2%
該代碼循環但無法複製我想要在輸出中的行。
FOR %%f IN (*.whl) DO (
(FOR /L %%i IN (1,1,5) DO SET /P line1=) < %%f
(FOR /L %%i IN (1,1,10) DO SET /P line2=) < %%f
ECHO %line1% %line2% >> output.txt
)
但是,如果我改變它加入set file=%%f
和< %file%
更換< %%f
它不運行。
順便說一下,我用this method,這很好用,但我不知道我是否可以用我迄今使用的方法進行分類。
感謝您的幫助!
編輯:正如你可以看到這是我的第一篇文章,也是我在該語言中的第一步。我歡迎任何建議來提出這個問題,也許將來的問題更加詳細,因爲我可能無法感知與高級用戶相關的每個信息。
感謝@Magoo我的問題已解決,但我會有興趣的任何建議,以使此代碼更好(我想有一種更有效的方式來選擇只需要的行,而不是使用FOR /L
,並通過每一個直到正確的那一行)。
此外,如果任何人對我描述的不同問題有解釋(例如< %%f
而不是< %file%
)將是最受歡迎的。
事實上,它解決我的問題!謝謝!但是,你能解釋一下我爲什麼需要寫'CALL ECHO'這是我第一次看到它寫的那樣。爲什麼'line1'和'line2'有兩組''%%'?我雖然已經足夠爲一個變量寫'%line1%'。你說的對,'FOR/L'似乎不是最好的方法。有沒有辦法直接按照我想要的路線行事?我儘可能詳細地解釋我的問題。我應該添加哪些信息才能更具體? – bcor
'call echo %% var %%'使用解析技巧。由於'%%'解析爲'%'(所以你可以回顯'%'符號),該行被解釋爲'echo%var%',但是用當前環境的副本執行,因此顯示當前值變量。如果沒有'call',就會顯示'%var%'(字面意思),'echo%var%'會顯示var的vakue,就像當第一次輸入塊(括號內的一系列命令)時一樣。還有其他方法可以做到這一點 - 我所展示的是最簡單的方法。在本FAQ中搜索數百篇關於'delayedexpansion'的論文。 – Magoo
我看不出用於選擇第5行和第10行的'for/L'方法有什麼不妥。幸運的是,它們是固定的行號 - 就像「第三次出現後的第五行」文件中的xyzzpl'實現起來會更困難。 – Magoo