我们可以添加任何字符串以及正在写入或附加到文件的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“遗产”:-) –