2015-01-05 57 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 
相关问题