我尝试了一切我可以,但我不能在文本文件中使用批处理文件的行数。我是新手,想创建数控程序与批处理文件,通过简单地点击一个 bat 文件。我成功地创建了数控程序(这是一个文本文件,正如你可以看到下面),但不能给予它行号。行数是不同的,不总是10,如在这个例子中。
我只需要:
BEGIN PGM OM11 MM
CALL LBL 101
M323
CYCL DEF 247 DEF. ZERO PEZZO Q339=+1 ; NUMERO ORIGINE
CALL PGM TNC:\master\master-1\001 hdh code masolata.H
CALL PGM TNC:\master\master-1\002 hdh code msolata msolata.h
CALL PGM TNC:\master\master-1\003 hdh code1.H
CALL PGM TNC:\master\master-1\004 hdh code2.h
;
M323
END PGM OM11 MM
改为:
0 BEGIN PGM OM11 MM
1 CALL LBL 101
2 M323
3 CYCL DEF 247 DEF. ZERO PEZZO Q339=+1 ; NUMERO ORIGINE
4 CALL PGM TNC:\master\master-1\001 hdh code masolata.H
5 CALL PGM TNC:\master\master-1\002 hdh code msolata msolata.h
6 CALL PGM TNC:\master\master-1\003 hdh code1.H
7 CALL PGM TNC:\master\master-1\004 hdh code2.h
8 ;
9 M323
10 END PGM OM11 MM
4条答案
按热度按时间hivapdat1#
一个批处理文件解决方案如下:
但此批处理代码存在一些问题:
1.此代码未正确更新包含
^
或!
的行。1.此代码忽略以
|
开头的行。选项字符串eol=|
确定行结束字符,默认情况下为;
,这是使用不同字符(如|
)的原因,因为行开始处的分号明显存在于要修改的文件中。1.FOR完全忽略空行。
优点是此解决方案比下一个解决方案更快:
阅读this answer,了解有关
setlocal
和endlocal
的详细信息,其中解释了为什么在FOR循环中使用这两个命令时第二个解决方案速度较慢。与第一批处理代码相比,此解决方案处理
^
和!
的速度较慢。要了解所使用的命令及其工作原理,请打开一个command prompt窗口,在其中执行以下命令,然后完整而仔细地阅读每个命令的帮助页面。
del /?
endlocal /?
exit /?
for /?
if /?
move /?
set /?
setlocal /?
另请阅读Microsoft关于Using Command Redirection Operators的文档,了解
>>
和2>nul
的说明。9rygscc12#
最简单的方法是使用FINDSTR命令:
并且
new.file
在其前面将具有数字行。删除数字前的
:
:wn9m85ua3#
下面的例子只是另一种可能性。这个脚本还没有经过测试,但是只要不超过文件大小和行长度的限制,它应该可以正常工作。
要使用该脚本,请将文本文件作为输入参数运行它;在命令行中输入,或直接将文本文件拖放到脚本上。输出文件应写入与输入文件相同的位置,并具有相同的名称,但扩展名为
.nc
;* (因此,请不要使用*.nc
文件进行输入或相应地更改9
行上的nc
)。****额外好处:***您还可以 (尽管此处不是必需的) 更改
3
行上的%incr%
值,以允许对每n
行进行编号,其中n
是整数,例如incr=3
。4
之前添加一个新行(读取SetLocal DisableDelayedExpansion
)可能比较谨慎 *kqlmhetl4#
numberME ---此批处理可以在文本文件的行中插入或删除连续编号。也可以根据要求指定另一个要包含的分隔符。包含帮助-英语帮助包含在封面中。
我创建了另一个脚本,因为我注意到Forloop中没有处理2GB的文件。此外,没有从Findstr返回最后一行的文件不会被终止-因为命令挂起。对于32位问题,我内置了另一个计数函数。这比使用findstr写一个新文件要花更长的时间。只支持最多1023字节的行。