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

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

我有多个后缀为NC的文本,想把H01改成H00(只存在前十五行)并把以原文本名字输出,我自己做的是查找全文再替换H01,查找速度度慢,想大佬们帮帮忙
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

第三方: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. )
复制代码

TOP

回复 2# LJY4.0


    这样是替换全部吗?我只想限定于(前十五行),谢谢你了

TOP

@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行内搜索,能否加个限制条件

TOP

回复 3# andywf


2楼代码第3行改成这样试试
  1. sed -i "1,15s/H01/H00/g" "%%a"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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

评分人数

    • andywf: 牛逼技术 + 1
    • LJY4.0: 刚进来本来想回顶楼,结果刚复制就看到你的了 ...技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6# Batcher


    感谢大佬

TOP

回复 6# Batcher


    谢谢大佬,但是会把15行后面的内容删除

TOP

本帖最后由 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

评分人数

TOP

回复 9# LJY4.0


    谢谢大佬,试了下,会把全部内容删除😂

TOP

  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

评分人数

微信:flashercs
QQ:49908356

TOP

回复 11# flashercs


    十分感谢大神的付出,能否再加多删除几行的命令M204 H1 D1,M24,M26,G43 H1,这几行是独立成行,命令是先删除这几行(存在前十五行内),然后再替换H01成H00(也是前15行内),以原来文件名输出

TOP

本帖最后由 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(限于前十五行)

TOP

回复 11# flashercs


    大神,因为有些文件比大大,替换速度很慢,有没有什么办法优化

TOP

最好能在网盘上发几个大文件,有利于代码测试,看看能否有人帮你优化。

TOP

返回列表