标题: [文本处理] [已解决]大神帮忙做个批处理替换前十五行指定字符串 [打印本页]
作者: andywf 时间: 2022-6-12 18:06 标题: [已解决]大神帮忙做个批处理替换前十五行指定字符串
我有多个后缀为NC的文本,想把H01改成H00(只存在前十五行)并把以原文本名字输出,我自己做的是查找全文再替换H01,查找速度度慢,想大佬们帮帮忙
作者: LJY4.0 时间: 2022-6-12 18:51
第三方:sed.exe
下载链接:http://bcn.bathome.net/tool/4.8/sed.exe- @echo off
- for /f 'delims=" %%a in ('dir /s/b/a-d *.NC') do (
- sed -i s/H01/H00/g %%a
- )
复制代码
作者: andywf 时间: 2022-6-12 19:00
回复 2# LJY4.0
这样是替换全部吗?我只想限定于(前十五行),谢谢你了
作者: andywf 时间: 2022-6-12 19:06
@echo off
for /f "delims=" %%i in ('dir /s/b *.NC') do (
for /f "delims=" %%a in ('type "%%~fi"') do (
set "foo=%%a"
call,set foo=%%foo:H01=H00%%
call,echo/%%foo%%>>"%%~fi._"
)
move "%%~fi._" "%%~fi"
)
exit
这样会搜索全文再替换,我只想限于前面15行内搜索,能否加个限制条件
作者: Batcher 时间: 2022-6-12 19:10
回复 3# andywf
2楼代码第3行改成这样试试- sed -i "1,15s/H01/H00/g" "%%a"
复制代码
作者: Batcher 时间: 2022-6-12 19:16
回复 4# andywf - @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
- set "n=0"
- (for /f "delims=" %%a in ('type "%%i"') do (
- set /a n+=1
- if !n! leq 15 (
- set "foo=%%a"
- set "foo=!foo:H01=H00!"
- echo,!foo!
- )
- ))>"%%~fi._"
- move "%%~fi._" "%%~fi"
- )
复制代码
作者: andywf 时间: 2022-6-12 19:19
回复 6# Batcher
感谢大佬
作者: andywf 时间: 2022-6-12 19:25
回复 6# Batcher
谢谢大佬,但是会把15行后面的内容删除
作者: LJY4.0 时间: 2022-6-12 19:58
本帖最后由 LJY4.0 于 2022-6-12 20:02 编辑
- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
- set "n=0"
- (for /f "delims=" %%a in ('type "%%i"') do (
- set /a n+=1
- if !n! leq 15 (
- set "foo=%%a"
- set "foo=!foo:H01=H00!"
- echo,!foo!
- )
- ))>"%%~fi._"
- more +15 %%i>>%%~fi._
- move "%%~fi._" "%%~fi"
- )
复制代码
回复 8# andywf
作者: andywf 时间: 2022-6-12 20:41
回复 9# LJY4.0
谢谢大佬,试了下,会把全部内容删除😂
作者: flashercs 时间: 2022-6-12 21:15
- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
- set "n=0"
- (for /f "delims=" %%a in ('type "%%i"') do (
- set /a n+=1
- if !n! leq 15 (
- set "foo=%%a"
- set "foo=!foo:H01=H00!"
- echo,!foo!
- ) else echo,%%a
- ))>"%%~fi._"
- move "%%~fi._" "%%~fi"
- )
复制代码
作者: andywf 时间: 2022-6-12 22:52
回复 11# flashercs
十分感谢大神的付出,能否再加多删除几行的命令M204 H1 D1,M24,M26,G43 H1,这几行是独立成行,命令是先删除这几行(存在前十五行内),然后再替换H01成H00(也是前15行内),以原来文件名输出
作者: andywf 时间: 2022-6-12 23:03
本帖最后由 andywf 于 2022-6-12 23:13 编辑
@echo off
setlocal enabledelayedexpansion
set "v1=M204 H1 D1"
set "v2=G43 H1"
set "v3=M24"
set "v4=M26"
for %%a in (*.ptp) do (
findstr /i /v /c:"!v1!" "%%~a">new.tmp
findstr /i /v /c:"!v2!" new.tmp>"%%~a"
findstr /i /v /c:"!v3!" "%%~a">new.tmp
findstr /i /v /c:"!v4!" new.tmp>"%%~a"
del new.tmp)
这样的代码批处理很快,然后再加上替换HO1成H00(限于前十五行)
作者: andywf 时间: 2022-6-12 23:36
回复 11# flashercs
大神,因为有些文件比大大,替换速度很慢,有没有什么办法优化
作者: qixiaobin0715 时间: 2022-6-13 08:24
最好能在网盘上发几个大文件,有利于代码测试,看看能否有人帮你优化。
作者: qixiaobin0715 时间: 2022-6-13 09:17
修改11楼第6行代码不知是否可提高一点速度:- (for /f "usebackq delims=" %%a in ("%%i") do (
复制代码
作者: andywf 时间: 2022-6-13 13:02
回复 16# qixiaobin0715
会把全部内容删除
作者: andywf 时间: 2022-6-13 13:09
回复 16# qixiaobin0715
文件有几万行,只想删除前面的M204 H1 D1,把 H01替换成H00
「1.NC」https://www.aliyundrive.com/s/gYZG4gr6NW2
这只是其中一个文件
作者: flashercs 时间: 2022-6-13 15:36
- @echo off
- cd /d "%~dp0"
- sed.exe -i -E -e "1,15{/^(M204 H1 D1|M24|M26|G43 H1)\r?$/d;s/H01/H00/g;}" *.nc
- pause
复制代码
论坛下载sed.exe
作者: andywf 时间: 2022-6-13 20:40
回复 19# flashercs
成了,谢谢,牛逼克拉斯
作者: andywf 时间: 2022-6-13 21:17
回复 19# flashercs
如果存在两种后缀文件,怎么修改呢?例如有后缀是NC ,和PTP,修改内容不变,谢谢
作者: flashercs 时间: 2022-6-13 21:35
回复 21# andywf - @echo off
- cd /d "%~dp0"
- sed.exe -i -E -e "1,15{/^(M204 H1 D1|M24|M26|G43 H1)\r?$/d;s/H01/H00/g;}" *.nc *.ptp
- pause
复制代码
作者: andywf 时间: 2022-6-16 03:14
回复 22# flashercs
谢谢,已经完美了,我把它转成exe并使用了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |