我們可以添加任何字符串以及正在寫入或附加到文件的TEXT。將文本行寫入文件時可以修改文本行嗎?
例如
dir filepath/filename.txt >> file1.txt
我想在FILE1.TXT每一行的末尾添加一個字符串(,AB)。在同一行而不在下一行。
有點像
源文件
data1
data2
data3
的目標應該是
data1,ab
data2,ab
data3,ab
我們可以添加任何字符串以及正在寫入或附加到文件的TEXT。將文本行寫入文件時可以修改文本行嗎?
例如
dir filepath/filename.txt >> file1.txt
我想在FILE1.TXT每一行的末尾添加一個字符串(,AB)。在同一行而不在下一行。
有點像
源文件
data1
data2
data3
的目標應該是
data1,ab
data2,ab
data3,ab
可以使用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命令前添加「@」字符。
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
'「delims = *」'可能做工精細這種情況下,「共同方式」將是'「delims =」'(無定界符可言,所以沒有需要找到一個未使用的字符) – Stephan
當捕獲命令的輸出時,不需要USEBACKQ。你可以使用'for/f「delims =」%a in('dir filepath/filename.txt')做@echo%a,ab >> file1.txt'。請注意,從命令行運行時,DO命令應該以'@'作爲前綴。 – dbenham
@dbenham真的,我想我喜歡反引號,因爲我的UNIX「遺產」:-) –