标题: [文件操作] (已解决) 批处理如何替换含有指定字符串的行中的多处指定内容 [打印本页]
作者: 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 编辑
- @echo off
- set "file=HIVESY.INF"
- (for /f "delims=" %%a in ('findstr /n .* "%file%"') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- if "!str:,0x00030001,=!" neq "!str!" (
- set "s=!str:HKLM,"SYSTEM\=RegAdd, HKLM,0x3,"SYS\!"
- if "!s!" neq "!str!" set "str=!s:,0x00030001,=,!"
- )
- set "str=!str:*:=!"
- echo,!str!
- endlocal
- ))>"New_%file%"
- pause
复制代码
作者: apang 时间: 2014-7-22 22:44
本帖最后由 apang 于 2014-7-23 19:05 编辑
- @set @n=0;/* & echo off
- set "file=HIVESY.INF"
- cscript -nologo -e:jscript "%~0"<"%file%">"New_%file%"
- pause & exit/b & rem */
- txt = WScript.StdIn.ReadAll();
- txt = txt.replace(/HKLM,"SYSTEM\\(.+,)0x00030001,/ig, 'RegAdd, HKLM,0x3,"SYS\\$1')
- 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
- @echo off
- setlocal enabledelayedexpansion
- set a=HKLM,"SYSTEM\
- set b=RegAdd, HKLM,0x3,"SYS\
- for /f "delims=" %%a in (1.txt) do (
- echo %%a | find "0x00030001" >nul
- if not errorlevel 1 (
- set str=%%a
- call set str=%%str:%a%=%b%%%
- call set str=%%str:0x00030001,=%%
- ) else (
- set str=%%a
- )
- echo !str!
- )
- pause
复制代码
我是用的纯批处理,小学生水平...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |