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

[文本处理] [已解决]如何用批处理添加内容处理下列文本?

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

评分人数

14# tmplinshi


谢谢

TOP

本帖最后由 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。上面的代码处理了这个情况。

TOP

  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. 如何去掉末尾空格
复制代码

TOP

楼主说不懂sed
可以到这里看看教程:
http://bbs.bathome.net/forum-47-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. sed "s/^%[^\]*\\\|^.:..[^\]*\\/set \"var=!var:/;s/$/=%!\"/" a.txt | more >2.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

8# tmplinshi


自己想出来了,谢谢你的启发

TOP

8# tmplinshi


完全正确!谢谢你帮忙

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

要求替换内容变成“空”

TOP

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

TOP

4# ipqfhvk
我只要得出第2个文本 谢谢你的辛苦

TOP

4# ipqfhvk


echo 不行的,这个思路行不通
因为1.txt的内容不是固定不变的

刚才认真测试了一下 正常前的%可以去除,不用

TOP

有了第一个,第二个也很简单了

TOP

第一个:
  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
复制代码

TOP

2# tmplinshi
我也不知道

不过加上%有用,不能丢

TOP

好奇怪,为什么要在“正常”的前面加百分号?

TOP

返回列表