【问题标题】:Batch Insert the line number in each line在每行中批量插入行号
【发布时间】:2019-02-07 13:52:43
【问题描述】:

我有一个小问题,现在不能继续。 我想批量导入一个 .txt 文件并将其与行号一起输出到另一个 .txt。 例如,test.txt 文件如下所示:

hello
how 
are 
you

结果应该是文件 test2.txt,如下所示:

1: hello
2: how
3: are
4: you

我已经尝试了以下批次,但不幸的是我只得到一个空文件作为输出:

@echo off
setlocal enabledelayedexpansion
findstr / n; test.txt >test2.txt

有人有想法吗? 提前致谢!

【问题讨论】:

  • 如果可以在原始文件中,但在新文件中也可以。
  • 好的,我发布了两个选项,第二个是您想要使用的选项,因为原始选项是首选。
  • 行号后面没有空格,冒号findstr /n "^" test.txt >test2.txt Findstr 需要匹配,这里是行首。

标签: batch-file findstr


【解决方案1】:

这个版本会从test.txt写到test2.txt

@echo off
setlocal enabledelayedexpansion

set "myfile=test.txt"
set "outputfile=test2.txt"

for /f "tokens=*" %%a in ('type "%myfile%" ^| find /v /n "" ^& break ^> "%myfile%"') do (
     set "str=%%a
     set "str=!str:]=: !"
     set "str=!str:[=!"
     >>%outputfile% echo(!str!
  )

这个版本会写回原文件test.txt,再写回test.txt,从而覆盖它:

@echo off
setlocal enabledelayedexpansion

set "myfile=test.txt"

for /f "tokens=*" %%a in ('type "%myfile%" ^| find /v /n "" ^& break ^> "%myfile%"') do (
     set "str=%%a
     set "str=!str:]=: !"
     set "str=!str:[=!"
     >>%myfile% echo(!str!
  )

哪个会做你想做的事:

1: hello
2: how 
3: are 
4: you

注意,这也会给\n 编号,换句话说就是新的空行。例如,如果您有:

hello

how 
are 
you

这将导致:

1: hello
2:
3: how 
4: are 
5: you

【讨论】:

  • 使用FIND 将有效,直到他们的数据中有括号。此时数据将被损坏。 FINDSTR 使用冒号作为分隔符,这样看起来会是更好的选择。
  • 附注>"%output%" ( for…( code here ) )只会打开一次文件,性能提升很多,考虑大文件
  • @elzooilogico。是的。但是我在写回文件时曾经遇到过一个问题。但不记得是什么,但必须再次测试以尝试让错误再次发生,因为我可以显示它是什么。
  • 我只能在覆盖源文件的时候思考。我在移动设备上无法测试
  • @Gerhard Barnard 感谢您的跟进,这就是我所想的
【解决方案2】:

最简单的解决方案可能是使用findstr,像这样:

findstr /N "^" "test.txt" > "test_NEW.txt"

上面的命令行是针对空行的。要忽略并删除它们,请执行以下操作:

findstr /N /V "^$" "test.txt" > "test_NEW.txt"

要替换您的原始文件,只需在之后执行以下操作:

move /Y "test_NEW.txt" "test.txt" > nul

注意在行号后面的冒号后面插入了no SPACE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多