如何在Windows批处理文件中为文本文件添加行号

6

我该如何在批处理文件/命令提示符中为文本文件添加行号?

例如:

1 line1
2 line2
etc
3个回答

3

这是你要的:

@echo off
FOR /L %%G IN (1, 1, 100) DO (
     echo %%G line%%G
)

这可能仅适用于批处理文件,而不是命令行。
更多信息,请查看此页面
如果您想循环遍历现有文件并向其添加数字,则必须使用for /F循环处理该文件,并在每个循环迭代中使用类似于set /a counter+=1的语句来增加计数器。然后将每一行输出到一个新文件中,最后用新文件替换旧文件。

我可能错了,但我猜他想将这些数字添加到一个已有的文件中。 - Mark Wilkins
抱歉,我是指外部文件。 - James
FOR /F 循环会忽略空行。 - jeb

2
我能找到的最接近的翻译是这个,但它并不起作用:
@echo off

set file=%1     
set x=1

for /f "delims=|" %%i in (%file%) do (
  echo %x% %%i
  set /a x=%x%+1
)

for循环内的set不起作用(因为我们在糟糕的DOS中)。

set替换为调用另一个批处理文件来执行增量和设置x也不起作用。

补充说明

好的,加上@indiv建议的修复方法,我们得到了这个(似乎可以正常工作):

@echo off

set file=%1     
set x=1
setlocal EnableDelayedExpansion

for /f "delims=|" %%i in (%file%) do (
  echo !x! %%i
  set /a x=!x!+1
)

for循环中使用set的方法请参考help set(靠近末尾位置)。您需要在脚本中添加setlocal EnableDelayedExpansion,然后对于您想要在运行时而不是解析时展开的变量,您需要用!而不是%来包围它们。此外,请注意您不是在DOS中,而是在Windows命令 shell中。 - indiv
删除包含“|”的行,最好使用“delims=”,但这也会在包含“!”的行上失败。而空行将不会被处理。但其余部分可能有效。 - jeb

1

所有的方法都太复杂了,让我们来试试这个。对于Windows XP及更高版本(我们需要findstr),以下是在命令行或批处理中添加行号到输入文件的全部步骤,就像OP想要的那样...

type "in.txt"|findstr/n ^^ > "out.txt"

很好,很干净...可惜行号不能按照我希望的格式进行排版。 - Yitzchak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接