[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何删除文件中指定位置和内容的两个字符之间的内容?

如何用批处理 删除两个字符之间的内容(多行)?
例如:
G01X-3.0Y0.8
G01X0.0Y99.2
G01X350.0Y0.0
G01X4.0Y0.0
M03
G40
(PART RIPCUT)
G00X23.8Y-1187.6
M04
G01X0.0Y1500.0
M03
(BLOCK)
G00X-1937.6Y-1500.0
(END OF SHEET)
(END OF PROGRAM)
M30
(RIPCUT)和(BLOCK)之间的行
文件夹D:\CNC里放有许多.B3文件,需要批处理修改上面的代码。但有的文件没有(PART RIPCUT)和(BLOCK)及其之间的内容,这些文件不做修改。请各位朋友帮忙
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /s/b *.b3') do (
  3. cd.>"%%a_"
  4. for /f "tokens=1,2 delims=:" %%i in ('findstr /n "." "%%a"') do (
  5. set "var=%%j"
  6. if not defined n echo %%j
  7. if defined m echo %%j
  8. if "!var:~1,4!"=="PART" set n=%%i
  9. if "!var:~1,5!"=="BLOCK" set m=%%i & echo %%j
  10. ) >> "%%a_"
  11. set n=
  12. set m=
  13. move "%%a_" "%%a"
  14. )
  15. exit
复制代码
这个批处理bat,解决了上面的问题,能删除PART""BLOCK这两个字符间的内容。
(END OF SHEET)
M30
G01X-3.0Y0.8
G01X0.0Y99.2
G01X350.0Y0.0
G01X4.0Y0.0
M03
G40
(PART RIPCUT)
(BLOCK)
G00X-1937.6Y-1500.0
(END OF PROGRAM)
但是如果我把"PART"改成"G40","BLOCK""改成"G00X"却无法删除这两个字符间的内容。文件内容不变。
如果我把"PART"改成"G40","BLOCK""改成"M30"却无法删除这两个字符间的内容,而且文件内容还增加了。如下。
G01X-3.0Y0.8
G01X0.0Y99.2
G01X350.0Y0.0
G01X4.0Y0.0
M03
G40
(PART RIPCUT)
G00X23.8Y-1187.6
M04
G01X0.0Y1500.0
M03
(BLOCK)
G00X-1937.6Y-1500.0
(END OF SHEET)
(END OF PROGRAM)
M30

这个批处理文件能不能改成删除txt文件中任意指定位置和内容的两个字符之间的内容?不懂每句实际意义的菜鸟求助,谢谢。

请下载三方工具sed.exe

本帖最后由 cutebe 于 2021-4-28 12:24 编辑
  1. sed "/RIPCUT/,/BLOCK/d" b.b3
复制代码
  1. sed -n "/RIPCUT/,/BLOCK/!p" a.b3
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

网上查了下sed文件要放在system32下, a.b3的地方要输入文件路径,而且是要批量删除多个。txt文件中内容,这个sed "/RIPCUT/,/BLOCK/d" b.b3,能大约是删除RIPCUT和black间的内容生成b。b3的文件。实在是先要找放心的xp能用的sed。exe下载就不容易,这个更麻烦了。
请批处理论坛的高手帮忙改一下上面的批处理文件,这个用记事本复制,重命名为。bat文件一运行就可以解决问题了,谢谢。

TOP

@echo off & setlocal enabledelayedexpansion

set "file=2.txt"

DEL $>NUL 2>NUL
(for /f "delims=" %%a in (%file%) do (
    set/a Row+=1
    set "Str=%%a"
    for /f "tokens=1,3 delims=RIPCUT BLOCK" %%b in ('echo !Str!') do (
        echo %%b/ #%%c
    )
))>>$

MOVE $ %file%>nul 2>nul

pause & exit

这个也是我在网上找得,试了也不行。

TOP

@echo off&setlocal enabledelayedexpansion
set "ft=(PART RIPCUT)"
set "bk=(BLOCK)"
for /f "delims=" %%1 in ('dir D:\CNC\*.B3 /a-d/s/b') do (
    set n=
    for /f "tokens=1 delims=:" %%i in ('findstr /n "%ft% %bk%" %%~s1') do set/a n+=1&set _!n!=%%i
    if defined n (
              cd.>r.txt
         for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%~s1') do (
               if %%i lss !_1! echo.%%j
               if %%i gtr !_2! echo.%%j)>>r.txt
         copy /y r.txt %%~s1
))
echo 完成!&pause
这个也不行

TOP

下面代码保存为处理.vbs也可以运行
FolderPath=inputbox("输入处理的文件夹","输入处理的文件夹")
'FolderPath="F:\新建文件夹"
set fso=createobject("scripting.filesystemobject")
set folder=fso.getfolder(FolderPath)
set files=folder.files
for each fl in files
if right(fl,4)=".txt" Then
filename=fl
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filename, 1)
strContents = objFile.ReadAll
objFile.Close
If cbool(instr(strContents,"CDE")) And cbool(instr(strContents,"FGH")) Then
arrpath1=split(strContents,"CDE")
arrpath2=split(strContents,"FGH")
arrpath3=arrpath1(0)&chr(10)&arrpath2(1)
Set fso=CreateObject("Scripting.FileSystemObject")
Set File=fso.OpenTextFile(filename, 2,Ture)
File.WriteLine(arrpath3)
File.Close
End If
end If
Next
MsgBox("成功!")
这个是vbs的也不行

TOP

sed.exe 本论坛就可以搜索下载:
http://www.bathome.net/s/tool/index.html

sed.exe直接放在批处理所在目录即可,不一定要放system32
  1. ::请先做好备份,以下直接修改多个文件
  2. sed -i "/RIPCUT/,/BLOCK/d" *.b3
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 7# cutebe

非常非常感谢,确实很好用,已经解决问题。

TOP

返回列表