Board logo

标题: [文件操作] (已解决) 批处理如何替换含有指定字符串的行中的多处指定内容 [打印本页]

作者: yuanyannian    时间: 2014-7-22 19:54     标题: (已解决) 批处理如何替换含有指定字符串的行中的多处指定内容

本帖最后由 yuanyannian 于 2014-7-24 21:10 编辑

例如下述文本中(其中有很多内容),我想把所有含有 0x00030001 的行中的 HKLM,"SYSTEM\ 替换为 RegAdd, HKLM,0x3,"SYS\ ,并把这一行中的 ,0x00030001, 替换为 ,(一个逗号),其它行不变。这样的批处理请老师帮助,谢谢!
HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Pointer Class",0x00000002,"00335"
HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Pointer Port",\,0x00010001,"Scsi"
HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Primary Disk",0x00030001,\
    05,00,00,00,01,00,00,00,02,00,00,00,03,00,00,00,04,00,00,00,05,00,00,00
HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI CDROM Class",0x00030001,\
    02,00,00,00,01,00,00,00,02,00,00,00
HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Class",0x00030003,\
    03,00,00,00,01,00,00,00,02,00,00,00,03,00,00,00
作者: apang    时间: 2014-7-22 22:42

本帖最后由 apang 于 2014-7-23 19:04 编辑
  1. @echo off
  2. set "file=HIVESY.INF"
  3. (for /f "delims=" %%a in ('findstr /n .* "%file%"') do (
  4.     set "str=%%a"
  5.     setlocal enabledelayedexpansion
  6.     if "!str:,0x00030001,=!" neq "!str!" (
  7.         set "s=!str:HKLM,"SYSTEM\=RegAdd, HKLM,0x3,"SYS\!"
  8.         if "!s!" neq "!str!" set "str=!s:,0x00030001,=,!"
  9.     )
  10.     set "str=!str:*:=!"
  11.     echo,!str!
  12.     endlocal
  13. ))>"New_%file%"
  14. pause
复制代码

作者: apang    时间: 2014-7-22 22:44

本帖最后由 apang 于 2014-7-23 19:05 编辑
  1. @set @n=0;/* & echo off
  2. set "file=HIVESY.INF"
  3. cscript -nologo -e:jscript "%~0"<"%file%">"New_%file%"
  4. pause & exit/b & rem */
  5. txt = WScript.StdIn.ReadAll();
  6. txt = txt.replace(/HKLM,"SYSTEM\\(.+,)0x00030001,/ig, 'RegAdd, HKLM,0x3,"SYS\\$1')
  7. WScript.Echo(txt)
复制代码

作者: yuanyannian    时间: 2014-7-23 06:34

回复 3# apang


谢谢!
刚试了一下,没有反应?
作者: apang    时间: 2014-7-23 09:29

回复 4# yuanyannian


    把需要修改的文本压缩一下传上来,我试试
作者: yuanyannian    时间: 2014-7-23 13:13

好的
不好意思,传错了。
是这个:
作者: CrLf    时间: 2014-7-23 13:31

回复 6# yuanyannian


    亲,你的样本里就没有含 HKLM,"SYSTEM 的行
作者: apang    时间: 2014-7-23 19:09

回复 6# yuanyannian


    已修改,把代码保存为test.bat,与源文件 HIVESY.INF 放在一起
作者: yuanyannian    时间: 2014-7-23 20:16

太好了,圆满解决,实在感谢 apang 老师!!!

恕我“贪婪”。批处理能不能处理文本中的某个段落,比如整个段落截取,或删除呢?
比如还是这个文本,其中如下小节:

[AddReg]
HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Ntfs",0x00010003,0x00000001
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc","ANSI(00)",0x00000002,"YES"
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc","SYMBOL(02)",0x00000002,"NO"
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc","OEM(FF)",0x00000002,"YES"
...

[DelReg]
HKLM,"SYSTEM\CurrentControlSet\Services\fsvga"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0402"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0403"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0404"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0405"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0406"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0407"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0408"
HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0409"
...

我想将节“[AddReg]” 其下的所有内容全部截取到一个新文本中,或者删除节“[DelReg]” 及其所有内容,
该如何处理呢?
作者: yuanyannian    时间: 2014-7-23 20:17

本帖最后由 yuanyannian 于 2014-7-23 20:19 编辑

对不起,重了。
作者: yuanyannian    时间: 2014-7-23 20:17

回复 8# apang

对不起,重了。
作者: idos    时间: 2016-8-28 10:34

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=HKLM,"SYSTEM\
  4. set b=RegAdd, HKLM,0x3,"SYS\
  5. for /f "delims=" %%a in (1.txt) do (
  6. echo %%a | find "0x00030001" >nul
  7. if not errorlevel 1 (
  8. set str=%%a
  9. call set str=%%str:%a%=%b%%%
  10. call set str=%%str:0x00030001,=%%
  11. ) else (
  12. set str=%%a
  13. )
  14. echo !str!
  15. )
  16. pause
复制代码
我是用的纯批处理,小学生水平...




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2