求助大神帮忙:想用bat批处理处理一个txt文档,要求如下:
bat吧
全部回复
仅看楼主
level 4
1.对文件夹中所有txt文挡执行以下命令
2.删除txt档中的G05.1Q1 G05.1Q0
3.在文档开头和结尾增加单行的%,如果开头和结尾有%,则不需要添加
4.在txt档中第二个()后添加一行T*M06,T*M06也是单行
5.*的值与txt档中H后面的数字一样
2015年05月11日 00点05分 1
level 7
好麻烦呀
2015年05月11日 00点05分 2
小白不回这个[泪]
2015年05月11日 01点05分

2015年05月11日 01点05分
level 7
高难度呀,对了,为什么有这么坑爹的要求呀
2015年05月11日 01点05分 3
我是做机床编程的,用软件后处理出来的程序需要手动修改,程序很多,一道道改麻烦也容易出错,所以,想用批处理试试
2015年05月11日 02点05分
@了良马1a 贴文字出来,让我看看!
2015年05月11日 08点05分
level 14
给出一部分样本吧,不然不好理解
2015年05月11日 09点05分 4
level 4
文字样本如下:
(File_name=SAAC07)
G17G40G80
G91G28Z0.
G05.1Q1
M05
M09
G91G28Z0
G05.1Q0
N001 (D= 30.00 R= 0.00 H= 50.00 STOCK= 0.00)
G05.1Q1
G90G00G54X0.Y0.
S3000 M03
G43 Z150. H01
G00 X-6.703 Y-8.246
Z-12.
...
G03 X0.0 Y-11.598 R11.598 F1500.
G03 X11.598 Y0.0 R11.598
G03 X0.0 Y11.598 R11.598
G03 X-11.598 Y0.0 R11.598
G03 X-11.426 Y-1.99 R11.598
G01 Z-12.
G00 Z150.
;(toolname=D30,spindle=3000,stock=0.00\0.00,toolnum=1)
;(tooldia=30.00,toolcon=0.00,fl=50)
;(maxZ = 150. ,minZ = -15.)
;(time:0.15)
M05
M09
G91G28Z0
G05.1Q0
M30
@aiwozhonghuaba
@In76123
2015年05月12日 01点05分 5
太麻烦的话做1,2,3步就行,第4步第5步可以省略[笑眼]
2015年05月12日 01点05分
level 4
就做这个就行
2015年05月12日 01点05分 6
现在没空,晚上再看吧
2015年05月12日 07点05分
@In76123 不急不急,谢谢大神了[吐舌]
2015年05月12日 08点05分
level 14
@echo off
setlocal enabledelayedexpansion
(echo %%
for /f "delims=" %%i in (SAAC07.cnc) do (
 set "str=%%i"
 set "str=!str:G05.1Q1=!"
 echo !str:G05.1Q0=!
)
echo %%)>New.cnc
4和5需不需要保留小数?
2015年05月12日 08点05分 7
是对文件夹中的所有文件执行这个动作,还有不是输出new.cnc,还是原来的文件
2015年05月12日 08点05分
level 4
2015年05月12日 08点05分 8
.cnc文件都有什么规律,是部分文件还是所有的文件?
2015年05月12日 15点05分
在所需的文件中的这一行N001 (D= 30.00 R= 0.00 H= 50.00 STOCK= 0.00)的结构都是一样的嘛?
2015年05月12日 15点05分
是的,都一样的
2015年05月12日 23点05分
@In76123 结构都一样,
2015年05月12日 23点05分
level 4
文件都放在这样一个文件夹里,然后在文件夹里弄一个.bat文件,对cnc文件进行批处理
2015年05月13日 02点05分 9
大概懂了
2015年05月13日 02点05分
level 7
@echo off
setlocal enabledelayedexpansion
echo G05.1Q1>list
echo G05.1Q0>>list
for /f "delims=" %%h in ('dir/b SAAC*.cnc') do (
findstr /v /g:list %%h>ok.cnc
set/p str=<%%h
if "%str%" neq "%%" (echo %%>ok.cnc
) else (
cd.>%%h
for /f "skip=1 delims=" %%i in ('findstr .* ok.cnc') do (echo %%i>>%%h)
)
for /f "delims=" %%i in (ok.cnc) do (set str=%%i)
if "!str!" neq "%%" (echo.>>%%h&echo %%>>%%h)
for /f "tokens=1,8 delims=: " %%i in ('findstr/n ".*(.*H=.*" %%h') do (set n=%%i&set num=%%j)
cd.>ok.cnc
for /f "tokens=1,2 delims=:" %%i in ('findstr/n .* %%h') do (
if "%%i" neq "!n!" (echo %%j>>ok.cnc
) else (echo %%j>>ok.cnc
echo T!num!M06>>ok.cnc
)
)
move ok.cnc %%h>nul
)
del /f list>nul
2015年05月13日 11点05分 10
level 1
@echo off
for %%a in (G05.1Q1 G05.1Q0) do set "%%a=a"
for /f "delims=" %%a in ('findstr /m "%%" *.txt') do set "%%a=a"
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
(if not defined %%a (
echo %%
for /f "delims=" %%b in (%%a) do (
if not defined %%b (
ECHO %%b|findstr "\<H=\>" >nul&&call :END "%%b"||echo %%b
)
)
echo %%
) else (
call :loop "%%a"
))>>#
move # "%%a"
)
pause&exit
:loop
for /f "delims=" %%b in (%~1) do (
if not defined %%b (
ECHO %%b|findstr "\<H=\>" >nul&&call :END "%%b"||echo %%b
)
)
goto :eof
:END
for /f "tokens=7" %%i in ("%~1") do set "var=%%i"
echo %~1
echo T%var%M06
2015年05月13日 12点05分 11
[花心]
2015年05月14日 00点05分
这个最后输出一个文件名是#的文件,这个文件也不完整
2015年05月14日 02点05分
level 4
@echo off
for /f "delims=" %%j in ('dir /a-d /b *.txt') do (
echo %%>"%%~nj.txt"
echo %%>>#
for /f "delims=" %%a in (%%~sj) do (
if "%%a" neq "G05.1Q1" (
if "%%a" neq "G05.1Q0" echo %%a
)
)>>#
move # "%%j"
这个文件里有什么不对的地方么,我用了运行不了
@ijyfe
2015年05月14日 02点05分 12
你上传你的几个源文件吧,我测试下;昨天用你发的内容作测试时正常的
2015年05月14日 03点05分
@ijyfe 1.对文件夹中所有txt文挡执行以下命令(不需要合到一个文档里) 2.删除txt档中的G05.1Q1 G05.1Q0 3.在文档开头和结尾增加单行的%
2015年05月14日 04点05分
level 1
使用findstr命令,处理过程很慢;
已经做了修改,你可以试试下面的,
@echo off
for /f "delims=" %%a in ('findstr /m "%%" *.txt') do set "%%a=a"
for /f "delims=" %%a in ('dir /a-d /b /s *.txt') do (
if not defined %%~nxa (
(echo %%
call :loop "%%a"
echo %%)>>#
move # "%%a"
) else (
(call :loop "%%a")>>#
move # "%%a"
)
)
pause&exit
:loop
for /f "usebackq delims=" %%b in ("%~1") do (
for /f %%c in ("%%b") do (
if %%c neq G05.1Q1 (
if %%c neq G05.1Q0 (
if %%c==N001 (
for /f "tokens=7" %%d in ("%%b") do (
echo %%b
echo T%%dM06
)
) ELSE (
echo %%b
)
)
)
)
)
2015年05月14日 08点05分 13
可以了,可以把增加T*M06那段去掉么,也有可能用不到[哈哈]
2015年05月14日 08点05分
好了,自己改了下,居然成功了,谢谢了,帮大忙了[酷]
2015年05月14日 08点05分
level 1
麻烦把百度上你贴的另外一个问题,把我采纳吧,看在辛苦给你修改批处理的份上,给加点分吧
@echo off
for /f "delims=" %%a in ('findstr /m "%%" *.txt') do set "%%a=a"
for /f "delims=" %%a in ('dir /a-d /b /s *.txt') do (
if not defined %%~nxa (
(echo %%
call :loop "%%a"
echo %%)>>#
move # "%%a"
) else (
(call :loop "%%a")>>#
move # "%%a"
)
)
pause&exit
:loop
for /f "usebackq delims=" %%b in ("%~1") do (
for /f %%c in ("%%b") do (
if %%c neq G05.1Q1 (
if %%c neq G05.1Q0 (
echo %%b
)
)
)
)
2015年05月14日 08点05分 14
OK
2015年05月14日 08点05分
我又提了个问题,你把这个贴上去,我采纳你[勉强]
2015年05月14日 08点05分
回复
�»�������
:已经回答你了。[哈哈]
2015年05月14日 08点05分
1