2017-04-20 44 views
0

号码添加到现有生产线的最后一个文件试图号码添加到文件的行结束,看起来是这样的:如何在Windows命令脚本

Id 
CN04FIL002,21,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 10:32, 
CN04FIL002,365,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 10:35, 
CN04FIL002,3285,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 10:44, 
CN04FIL002,9318,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 10:59, 
CN04FIL002,3,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 11:01, 
CN04FIL002,2373,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 11:29, 
CN04FIL002,2684,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 11:10, 
CN04FIL002,26,,,cn04fil002.mhf.mhc,1,backupexec,03/30/2017 10:30,03/30/2017 10:30,03/30/2017 11:23, 

等。我想要做的是编写一个脚本,在每行最后一个逗号后添加递增数字,并保存当前数字,以便每次脚本运行时数字都可以继续递增。我会如何去做这样的事情?

+2

你有什么试过,你试过的怎么都失败了?理想情况下,您应该提供您尝试过的[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve),并且包含错​​误消息的具体信息以及错误消息和/或错误的输出。 SO不是代码写入服务;最好的问题是提供有用信息的问题,以便那些回答问题的人可以指导你设计自己的正确答案。参见[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)。 –

+0

您上次运行脚本时是否必须从结束行开始下一次编号?我清楚了吗? – dcg

回答

0

下面的代码做你想要的。

@echo off 

setlocal EnableDelayedExpansion 

for /f %%i in (count.txt) do (
    set "linesCount=%%i" 
) 

set "numLine=0" 
for /f "tokens=*" %%i in (file.txt) do (
    set /a "numLine+=1" 
    if "!linesCount!" equ "0" (
     echo(%%i!numLine!>>file.new.txt 
    ) else (
     set /a "linesCount-=1" 
     echo(%%i>>file.new.txt 
    ) 
) 

move /Y file.new.txt file.txt >nul 2>&1 
echo(!numLine!>count.txt 

我保存在一个名为count.txt的文件中,上次处理的行数量。如果它不存在,也就是说,该脚本从来没有运行create count.txt,其中内部为零。只需将file.txt重命名为您的文件名即可。

+0

什么是'echo('请问?' –

+0

@MarkSetchell我习惯使用'echo('来打印我想要的东西,例如'echo(bla> file.txt'只会将'bla'写入'file。 txt'。 – dcg

0

我认为这可能是最快的方法,包括:

@echo off 
set "_FILE=textfile.txt" 

for /F %%C in ('^< "%_FILE%" find /C /V ""') do set "COUNT=%%C" 
< "%_FILE%" (
    setlocal EnableDelayedExpansion 
    for /L %%I in (1,1,%COUNT%) do (
     set /A "INDEX=%%I-1" 
     set "LINE=" & set /P LINE="" 
     if !INDEX! GTR 0 (
      echo(!LINE!!INDEX! 
     ) else (
      echo(!LINE! 
     ) 
    ) 
    endlocal 
) 

此跳过第一行(Id),其被认为是一个标头。
附加的第一个索引号是1