2015-09-12 69 views
1

好吧我在文本文件中有幾行。我想獲得第一行並將其保存在另一個文件中。例如,這是文本文件:如何獲取使用批處理文件寫入新文本文件的文本文件的第一行?

put returns between paragraphs 
for linebreak add 2 spaces at end 
for linebreak add 2 spaces at end2 
for linebreak add 2 spaces at end3 

我想put returns between paragraphs要保存到另一個文件。

我用

for /f "tokens=" %%A in ('findstr /r "^[0-9][0-9]*$" <"C:\Users\Sherlock\Desktop\AbcImport\123.txt"') do echo 123>>1234.txt 
pause 

不過,這並不在所有的工作。

如何讓文本文件的第一行使用批處理文件寫入新文本文件?

回答

1

下面是將文本文件的第一個非空白/空行寫入另一個文本文件的批處理代碼。

@echo off 
for /F "usebackq delims=" %%I in ("InputTextFile.txt") do (
    echo %%I>"OutputTextFile.txt" 
    goto ContinueAfterLoop 
) 
:ContinueAfterLoop 

InputTextFile.txt是包含要複製的第一行的當前目錄中的文件。

OutputTextFile.txt是在當前目錄中創建的文件,第一行從輸入文件複製到此輸出文件中。

命令GOTO用於在處理完第一行後退出循環並在循環下面繼續批處理文件。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • echo /?
  • for /?
  • goto /?

閱讀也是微軟文章關於Using Command Redirection Operators

+0

如果第一行開頭這會失敗;或者如果第一行是空的(假設OP都想擁有的空行作爲輸出) – dbenham

0

可以使用,使用這個命令:

SetLocal EnableDelayedExpansion 
for /f "tokens=* delims=;" %%m in ("C:\Users\Sherlock\Desktop\AbcImport\123.txt") do (
    set /p FirstLine=<%%m 
    echo !FirstLine!>>1234.txt 
) 

,並支持多種文件:

SetLocal EnableDelayedExpansion 
for %%a in ("*") do (
    for /f "tokens=* delims=;" %%m in ("%%a") do (
     set /p FirstLine=<%%m 
     echo !FirstLine!>>1234.txt 
    ) 
) 
3

選項1 - SET/P:這是最簡單和最快的純批次的解決方案,提供該行不超過1021字節,並且不以必須保留的控制字符結束。文件的大小無關緊要 - 它會始終快速讀取和寫入第一行。

@echo off 
setlocal enableDelayedExpansion 
set "ln=" 
<"input.txt" set /p "ln=" 
>"output.txt" (echo(!ln!) 

選擇2 - FOR/F:這將排隊工作〜8191個字節長,但它可能會很慢,如果該文件是真正的大,因爲FOR/F迴路必須讀取整個文件在處理第一行之前。該解決方案與Mofi答案基本相同,只是它禁用了EOL選項,所以它不會忽略第一行,而不管第一個字符是什麼。它有一個限制,即它會跳過空行,所以在技術上它沒有給出正確的結果,如果第一行是空:

@echo off 
for /f usebackq^ delims^=^ eol^= %%A in ("input.txt") do echo(%%A>"output.txt"&goto :break 
:break 

有一種方法來保護第一線,如果使用純是空的批次,但我不會打擾。我會繼續...

選項3 - JREPL.BAT或其他一些非批處理解決方案:批處理在處理文本文件方面很差。使用VBScript,JScript或Powershell等其他腳本語言會更好。或者任何數量的unix實用程序的Windows端口。

我會使用JREPL.BAT - 一個混合的JScrpit /批處理正則表達式文本處理實用程序,它可以在任何Windows機器上從本機運行,從XP開始。對於這樣一個簡單的任務來說,這是一種過度的矯枉過正,但它是一個非常方便,強大且高效的工具,可以用在你的武器庫中。一旦擁有了它,它就可以用於許多文本處理任務。完整的文檔嵌入在腳本中。

jrepl "^.*" "$&" /jendln "quit=true" /f "input.txt" /o "output.txt" 

如果將該命令放入批處理腳本中,則使用CALL JREPL

+0

感謝這個非常好的可能的解決方案總結。 +1一個由我。在使用SET/P讀取之前,應該清除 – Mofi

0
rem Get the first line of a text file: 
set /P "line=" < "C:\Users\Sherlock\Desktop\AbcImport\123.txt" 
rem Write it into a new text file: 
echo %line%> 1234.txt 
+0

行,並且如果行包含有毒字符,則需要延遲擴展。 – dbenham

相關問題