Board logo

标题: [文本处理] [已解决]如何用批处理添加内容处理下列文本? [打印本页]

作者: 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替换成=%正常!"]
难点:主要就是那个“%”号和“=”号不好处理
  1. %SystemRoot%\system32\alrsvc.dll
  2. C:\WINDOWS\system32\qmgr.dll
  3. %SystemRoot%\system32\rpcss.dll
  4. %SystemRoot%\System32\msgsvc.dll
  5. %Systemroot%\System32\swprv.dll
  6. %SystemRoot%\System32\termsrv.dll
  7. C:\Windows\system32\drivers\ASACPI.sys
复制代码
我正在想办法得到2.txt,内容如下
  1. set "var=!var:system32\alrsvc.dll=%正常!"
  2. set "var=!var:system32\qmgr.dll=%正常!"
  3. set "var=!var:system32\rpcss.dll=%正常!"
  4. set "var=!var:System32\msgsvc.dll=%正常!"
  5. set "var=!var:System32\swprv.dll=%正常!"
  6. set "var=!var:System32\termsrv.dll=%正常!"
  7. 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

第一个:
  1. echo.%%SystemRoot%%\system32\alrsvc.dll>1.txt
  2. echo.C:\WINDOWS\system32\qmgr.dll>>1.txt
  3. echo.%%SystemRoot%%\system32\rpcss.dll>>1.txt
  4. echo.%%SystemRoot%%\System32\msgsvc.dll>>1.txt
  5. echo.%%Systemroot%%\System32\swprv.dll>>1.txt
  6. echo.%%SystemRoot%%\System32\termsrv.dll>>1.txt
  7. 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 编辑
  1. @echo off
  2. setlocal disabledelayedexpansion
  3. (
  4.     for /f "delims=" %%i in (1.txt) do (
  5.         set var=%%i
  6.         setlocal enabledelayedexpansion
  7.         set var=!var:*\system32\=system32\!
  8.         echo set "var=^!var:!var!=正常^!"
  9.         endlocal
  10.     )
  11. ) >2.txt
  12. endlocal
复制代码

作者: batpro    时间: 2011-6-18 20:42

8# tmplinshi


完全正确!谢谢你帮忙

能否写一段代码  ,我改了帖子

要求替换内容变成“空”
作者: batpro    时间: 2011-6-18 20:44

8# tmplinshi


自己想出来了,谢谢你的启发
作者: Batcher    时间: 2011-6-18 21:00

  1. 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

  1. %SystemRoot%\system32\alrsvc.dll        
  2. C:\WINDOWS\system32\qmgr.dll      
  3. %SystemRoot%\system32\rpcss.dll         
  4. %SystemRoot%\System32\msgsvc.dll      
  5. %Systemroot%\System32\swprv.dll     
  6. %SystemRoot%\System32\termsrv.dll      
  7. C:\Windows\system32\drivers\ASACPI.sys      
  8. 如何去掉末尾空格
复制代码

作者: tmplinshi    时间: 2011-6-18 21:45

本帖最后由 tmplinshi 于 2011-6-18 21:57 编辑

13# batpro
  1. @echo off
  2. setlocal disabledelayedexpansion
  3. (
  4.     for /f "tokens=* eol=*" %%i in (1.txt) do (
  5.         for %%j in ("|%%i") do set var=%%~fj
  6.         setlocal enabledelayedexpansion
  7.         set "var=!var:*|=!"
  8.         set var=!var:*\system32\=system32\!
  9.         echo set "var=^!var:!var!=正常^!"
  10.         endlocal
  11.     )
  12. )
  13. endlocal
  14. 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://www.bathome.net/) Powered by Discuz! 7.2