找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31391|回复: 14

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

[复制链接]
发表于 2011-6-18 20:03:09 | 显示全部楼层 |阅读模式
本帖最后由 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”    谢谢

评分

参与人数 1PB +2 收起 理由
tmplinshi + 2 感谢标注[已解决]字样

查看全部评分

发表于 2011-6-18 20:08:42 | 显示全部楼层
好奇怪,为什么要在“正常”的前面加百分号?
 楼主| 发表于 2011-6-18 20:13:48 | 显示全部楼层
2# tmplinshi
我也不知道

不过加上%有用,不能丢
发表于 2011-6-18 20:18:35 | 显示全部楼层
第一个:

  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
复制代码
发表于 2011-6-18 20:18:59 | 显示全部楼层
有了第一个,第二个也很简单了
 楼主| 发表于 2011-6-18 20:26:44 | 显示全部楼层
4# ipqfhvk


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

刚才认真测试了一下 正常前的%可以去除,不用
 楼主| 发表于 2011-6-18 20:28:56 | 显示全部楼层
4# ipqfhvk
我只要得出第2个文本 谢谢你的辛苦
发表于 2011-6-18 20:35:06 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-6-18 20:42:07 | 显示全部楼层
8# tmplinshi


完全正确!谢谢你帮忙

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

要求替换内容变成“空”
 楼主| 发表于 2011-6-18 20:44:43 | 显示全部楼层
8# tmplinshi


自己想出来了,谢谢你的启发
发表于 2011-6-18 21:00:57 | 显示全部楼层
  1. sed "s/^%[^\]*\\\|^.:..[^\]*\\/set "var=!var:/;s/$/=%!"/" a.txt | more >2.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
发表于 2011-6-18 21:17:18 | 显示全部楼层
楼主说不懂sed
可以到这里看看教程:
http://bbs.bathome.net/forum-47-1.html
 楼主| 发表于 2011-6-18 21:20:05 | 显示全部楼层
  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. 如何去掉末尾空格
复制代码
发表于 2011-6-18 21:45:39 | 显示全部楼层
本帖最后由 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。上面的代码处理了这个情况。
 楼主| 发表于 2011-6-18 21:49:59 | 显示全部楼层
14# tmplinshi


谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:53 , Processed in 0.029897 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表