找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 52568|回复: 22

[文本处理] [已解决]大神帮忙做个批处理替换前十五行指定字符串

[复制链接]
发表于 2022-6-12 18:06:56 | 显示全部楼层 |阅读模式
我有多个后缀为NC的文本,想把H01改成H00(只存在前十五行)并把以原文本名字输出,我自己做的是查找全文再替换H01,查找速度度慢,想大佬们帮帮忙

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2022-6-12 18:51:46 | 显示全部楼层
第三方:sed.exe
下载链接:http://bcn.bathome.net/tool/4.8/sed.exe
  1. @echo off
  2. for /f 'delims=" %%a in ('dir /s/b/a-d *.NC') do (
  3. sed -i s/H01/H00/g %%a
  4. )
复制代码
 楼主| 发表于 2022-6-12 19:00:03 | 显示全部楼层
回复 2# LJY4.0


    这样是替换全部吗?我只想限定于(前十五行),谢谢你了
 楼主| 发表于 2022-6-12 19:06:37 | 显示全部楼层
@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行内搜索,能否加个限制条件
发表于 2022-6-12 19:10:21 | 显示全部楼层
回复 3# andywf


2楼代码第3行改成这样试试
  1. sed -i "1,15s/H01/H00/g" "%%a"
复制代码
发表于 2022-6-12 19:16:06 | 显示全部楼层
回复 4# andywf
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
  5.     set "n=0"
  6.     (for /f "delims=" %%a in ('type "%%i"') do (
  7.         set /a n+=1
  8.         if !n! leq 15 (
  9.             set "foo=%%a"
  10.             set "foo=!foo:H01=H00!"
  11.             echo,!foo!
  12.         )
  13.     ))>"%%~fi._"
  14.     move "%%~fi._" "%%~fi"
  15. )
复制代码

评分

参与人数 2技术 +2 收起 理由
andywf + 1 牛逼
LJY4.0 + 1 刚进来本来想回顶楼,结果刚复制就看到你的了 ...

查看全部评分

 楼主| 发表于 2022-6-12 19:19:09 | 显示全部楼层
回复 6# Batcher


    感谢大佬
 楼主| 发表于 2022-6-12 19:25:04 | 显示全部楼层
回复 6# Batcher


    谢谢大佬,但是会把15行后面的内容删除
发表于 2022-6-12 19:58:01 | 显示全部楼层
本帖最后由 LJY4.0 于 2022-6-12 20:02 编辑
  1.     @echo off
  2.     cd /d "%~dp0"
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
  5.         set "n=0"
  6.         (for /f "delims=" %%a in ('type "%%i"') do (
  7.             set /a n+=1
  8.             if !n! leq 15 (
  9.                 set "foo=%%a"
  10.                 set "foo=!foo:H01=H00!"
  11.                 echo,!foo!
  12.             )
  13.         ))>"%%~fi._"
  14.        more +15 %%i>>%%~fi._
  15.         move "%%~fi._" "%%~fi"
  16.     )
复制代码
回复 8# andywf

评分

参与人数 1技术 +1 收起 理由
andywf + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-6-12 20:41:53 | 显示全部楼层
回复 9# LJY4.0


    谢谢大佬,试了下,会把全部内容删除😂
发表于 2022-6-12 21:15:21 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.NC') do (
  5.     set "n=0"
  6.     (for /f "delims=" %%a in ('type "%%i"') do (
  7.         set /a n+=1
  8.         if !n! leq 15 (
  9.             set "foo=%%a"
  10.             set "foo=!foo:H01=H00!"
  11.             echo,!foo!
  12.         ) else echo,%%a
  13.     ))>"%%~fi._"
  14.     move "%%~fi._" "%%~fi"
  15. )
复制代码

评分

参与人数 1技术 +1 收起 理由
andywf + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-6-12 22:52:38 | 显示全部楼层
回复 11# flashercs


    十分感谢大神的付出,能否再加多删除几行的命令M204 H1 D1,M24,M26,G43 H1,这几行是独立成行,命令是先删除这几行(存在前十五行内),然后再替换H01成H00(也是前15行内),以原来文件名输出
 楼主| 发表于 2022-6-12 23:03:01 | 显示全部楼层
本帖最后由 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(限于前十五行)
 楼主| 发表于 2022-6-12 23:36:42 | 显示全部楼层
回复 11# flashercs


    大神,因为有些文件比大大,替换速度很慢,有没有什么办法优化
发表于 2022-6-13 08:24:54 | 显示全部楼层
最好能在网盘上发几个大文件,有利于代码测试,看看能否有人帮你优化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 23:32 , Processed in 0.033772 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表