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

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

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

评分人数

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

  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
复制代码
我是用的纯批处理,小学生水平...

TOP

回复 8# apang

对不起,重了。
76626yyn

TOP

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

对不起,重了。
76626yyn

TOP

太好了,圆满解决,实在感谢 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]” 及其所有内容,
该如何处理呢?
76626yyn

TOP

回复 6# yuanyannian


    已修改,把代码保存为test.bat,与源文件 HIVESY.INF 放在一起

TOP

回复 6# yuanyannian


    亲,你的样本里就没有含 HKLM,"SYSTEM 的行

TOP

好的
不好意思,传错了。
是这个:
76626yyn

TOP

回复 4# yuanyannian


    把需要修改的文本压缩一下传上来,我试试

TOP

回复 3# apang


谢谢!
刚试了一下,没有反应?
76626yyn

TOP

本帖最后由 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)
复制代码
1

评分人数

TOP

本帖最后由 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
复制代码

TOP

返回列表