我已尽一切努力,但无法使用批处理文件对文本文件中的行进行编号。我是新手,想通过单击bat文件来创建带有批处理文件的CNC程序。我成功创建了cnc程序(这是一个文本文件,如下所示),但是无法给它提供行号。在此示例中,行数是不同的,并非总是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
一个批处理文件解决方案是这样的:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "FileName=File.cnc"
if not exist "%FileName%" endlocal & goto :EOF
set "LineNumber=0"
set "TempFile=%TEMP%\%~n0.tmp"
del "%TempFile%" 2>nul
for /F "usebackq eol=| delims=" %%I in ("%FileName%") do (
echo !LineNumber! %%I>>"%TempFile%"
set /A LineNumber+=1
)
move /Y "%TempFile%" "%FileName%"
if errorlevel 1 del "%TempFile%"
endlocal
但是此批处理代码存在一些问题:
^
或!
不正确的行。|
该代码忽略以开头的行。选项字符串eol=|
确定行尾字符,默认情况下;
,这是使用其他字符的原因,例如,|
由于行开头的分号明显存在于要修改的文件中,因此这是原因。优点是此解决方案比下一个解决方案快:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileName=File.cnc"
if not exist "%FileName%" endlocal & goto :EOF
set "LineNumber=0"
set "TempFile=%TEMP%\%~n0.tmp"
del "%TempFile%" 2>nul
for /F "usebackq eol=| delims=" %%I in ("%FileName%") do (
set "Line=%%I"
setlocal EnableDelayedExpansion
echo !LineNumber! !Line!>>"%TempFile%"
endlocal
set /A LineNumber+=1
)
move /Y "%TempFile%" "%FileName%"
if errorlevel 1 del "%TempFile%"
endlocal
请阅读此答案,以获取有关setlocal
并endlocal
解释为什么使用FOR循环中的这两个命令第二种解决方案速度较慢的详细信息。
与第一批代码相比,这种较慢的解决方案可以处理^
并且!
行正确。
为了了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
move /?
set /?
setlocal /?
另请阅读Microsoft有关使用命令重定向运算符的文章,以获取有关>>
和的说明2>nul
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句