2015-01-05 58 views
0

我們可以添加任何字符串以及正在寫入或附加到文件的TEXT。將文本行寫入文件時可以修改文本行嗎?

例如

dir filepath/filename.txt >> file1.txt 

我想在FILE1.TXT每一行的末尾添加一個字符串(,AB)。在同一行而不在下一行。

有點像

源文件

data1 

data2 

data3 

的目標應該是

data1,ab 

data2,ab 

data3,ab 

回答

1

可以使用FOR命令用於此目的(見HELP FOR在命令提示符):

FOR /F "delims=" %i IN (filepath\filename.txt) DO ECHO %i,ab >> file1.txt 

這將從filepath\filename.txt讀取每行並將其寫入file1.txt,並附上您的ab。現在

,如果你真的想要執行dir filepath\filename.txt命令,並添加ab到它的輸出,那麼你會做以下

FOR /F "usebackq delims=" %i IN (`dir filepath\filename.txt`) DO ECHO %i,ab >> file1.txt 

FOR /F "delims=" %i IN ('dir filepath\filename.txt') DO ECHO %i,ab >> file1.txt 

最後,請注意如果要將上述命令放入批處理文件中,則需要編寫%%i以跳過%i

此外,爲了減少在命令行上執行的噪聲,可以使用「@ECHO」而不是「ECHO」,即以@dbenham註釋的形式,在DO命令前添加「@」字符。

+1

'「delims = *」'可能做工精細這種情況下,「共同方式」將是'「delims =」'(無定界符可言,所以沒有需要找到一個未使用的字符) – Stephan

+0

當捕獲命令的輸出時,不需要USEBACKQ。你可以使用'for/f「delims =」%a in('dir filepath/filename.txt')做@echo%a,ab >> file1.txt'。請注意,從命令行運行時,DO命令應該以'@'作爲前綴。 – dbenham

+0

@dbenham真的,我想我喜歡反引號,因爲我的UNIX「遺產」:-) –

0

Christian K's answer使用FOR/F是你如何使用純批處理來做到這一點。根據命令輸出可能會有複雜情況。

默認情況下,FOR/F將跳過以;(默認EOL字符)開頭的行。如果您知道某個字符不能出現在輸出中,那麼您可以簡單地將EOL設置爲該字符。但有時候你無法控制或瞭解潛在產出。有一種尷尬的語法禁用了DELIMS和EOL,從而解決了這個問題。

請注意,我在DO命令前添加了@以防止命令行被回顯。我還附上括號內的整個結構和重定向只有一次,因爲它是更有效的:

(for /f delims^=^ eol^= %A in ('someCommand') do @echo %A,ab)>file1.txt 

但仍有將被跳過在空行一個潛在的問題。有一種解決方案使用FINDSTR或FIND爲每行添加行號前綴,然後刪除循環內的前綴。但是這可能會減慢速度。

使用我的JREPL.BAT utility執行正則表達式搜索和替換文本要簡單得多。如果你處理大量的輸出,這也會更快。

下面將追加,ab輸出的所有行,包括空行:

someCommand | jrepl "$" ",ab" >>file1.txt 

你舉的例子表明您不想添加任何東西的空行。下面完成該操作:

someCommand | jrepl ".$" "$&,ab" >>file1.txt 
相關問題