标题: [文本处理] [已解决]如何用批处理添加内容处理下列文本? [打印本页]
作者: batpro 时间: 2011-6-18 20:03 标题: [已解决]如何用批处理添加内容处理下列文本?
本帖最后由 batpro 于 2011-6-18 21:07 编辑
通过文件1.txt中如何得到2.txt
1.txt中内容:
说明:
一、[不能用echo,只能采取替换的方式,比如 如何将“%SystemRoot%”和“C:\WINDOWS\”替换成“set "var=!var: ”]
二、[如何将.dll和.sys替换成=%正常!"]
难点:主要就是那个“%”号和“=”号不好处理- %SystemRoot%\system32\alrsvc.dll
- C:\WINDOWS\system32\qmgr.dll
- %SystemRoot%\system32\rpcss.dll
- %SystemRoot%\System32\msgsvc.dll
- %Systemroot%\System32\swprv.dll
- %SystemRoot%\System32\termsrv.dll
- C:\Windows\system32\drivers\ASACPI.sys
复制代码
我正在想办法得到2.txt,内容如下- set "var=!var:system32\alrsvc.dll=%正常!"
- set "var=!var:system32\qmgr.dll=%正常!"
- set "var=!var:system32\rpcss.dll=%正常!"
- set "var=!var:System32\msgsvc.dll=%正常!"
- set "var=!var:System32\swprv.dll=%正常!"
- set "var=!var:System32\termsrv.dll=%正常!"
- set "var=!var:system32\drivers\ASACPI.sys=%正常!"
复制代码
这样做是文理自动处理白名单,请大家帮忙写一个“自动处理白名单.bat” 谢谢
作者: tmplinshi 时间: 2011-6-18 20:08
好奇怪,为什么要在“正常”的前面加百分号?
作者: batpro 时间: 2011-6-18 20:13
2# tmplinshi
我也不知道
不过加上%有用,不能丢
作者: ipqfhvk 时间: 2011-6-18 20:18
第一个:- echo.%%SystemRoot%%\system32\alrsvc.dll>1.txt
-
- echo.C:\WINDOWS\system32\qmgr.dll>>1.txt
-
- echo.%%SystemRoot%%\system32\rpcss.dll>>1.txt
-
- echo.%%SystemRoot%%\System32\msgsvc.dll>>1.txt
-
- echo.%%Systemroot%%\System32\swprv.dll>>1.txt
-
- echo.%%SystemRoot%%\System32\termsrv.dll>>1.txt
-
- echo.C:\Windows\system32\drivers\ASACPI.sys>>1.txt
复制代码
作者: ipqfhvk 时间: 2011-6-18 20:18
有了第一个,第二个也很简单了
作者: batpro 时间: 2011-6-18 20:26
4# ipqfhvk
echo 不行的,这个思路行不通
因为1.txt的内容不是固定不变的
刚才认真测试了一下 正常前的%可以去除,不用
作者: batpro 时间: 2011-6-18 20:28
4# ipqfhvk
我只要得出第2个文本 谢谢你的辛苦
作者: tmplinshi 时间: 2011-6-18 20:35
本帖最后由 tmplinshi 于 2011-6-18 20:36 编辑
- @echo off
- setlocal disabledelayedexpansion
- (
- for /f "delims=" %%i in (1.txt) do (
- set var=%%i
- setlocal enabledelayedexpansion
- set var=!var:*\system32\=system32\!
- echo set "var=^!var:!var!=正常^!"
- endlocal
- )
- ) >2.txt
- endlocal
复制代码
作者: batpro 时间: 2011-6-18 20:42
8# tmplinshi
完全正确!谢谢你帮忙
能否写一段代码 ,我改了帖子
要求替换内容变成“空”
作者: batpro 时间: 2011-6-18 20:44
8# tmplinshi
自己想出来了,谢谢你的启发
作者: Batcher 时间: 2011-6-18 21:00
- sed "s/^%[^\]*\\\|^.:..[^\]*\\/set \"var=!var:/;s/$/=%!\"/" a.txt | more >2.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
作者: Batcher 时间: 2011-6-18 21:17
楼主说不懂sed
可以到这里看看教程:
http://bbs.bathome.net/forum-47-1.html
作者: batpro 时间: 2011-6-18 21:20
- %SystemRoot%\system32\alrsvc.dll
- C:\WINDOWS\system32\qmgr.dll
- %SystemRoot%\system32\rpcss.dll
- %SystemRoot%\System32\msgsvc.dll
- %Systemroot%\System32\swprv.dll
- %SystemRoot%\System32\termsrv.dll
- C:\Windows\system32\drivers\ASACPI.sys
-
- 如何去掉末尾空格
复制代码
作者: tmplinshi 时间: 2011-6-18 21:45
本帖最后由 tmplinshi 于 2011-6-18 21:57 编辑
13# batpro - @echo off
- setlocal disabledelayedexpansion
- (
- for /f "tokens=* eol=*" %%i in (1.txt) do (
- for %%j in ("|%%i") do set var=%%~fj
- setlocal enabledelayedexpansion
- set "var=!var:*|=!"
- set var=!var:*\system32\=system32\!
- echo set "var=^!var:!var!=正常^!"
- endlocal
- )
- )
- endlocal
- pause
复制代码
其实把 8 楼代码中的 set var=%%i 改成 set var=%%~fi 就可以了。
但为了防止不含盘符的路径,如 a\a.exe,假设当前路径是 D:\test,那么 %%~fi 的结果会是 D:\test\a\a.exe。上面的代码处理了这个情况。
作者: batpro 时间: 2011-6-18 21:49
14# tmplinshi
谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |