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

[文本处理] [已解决]批处理如何去除含特定字符的项(特定字符不止一个)?

[复制链接]
发表于 2011-7-8 17:24:12 | 显示全部楼层 |阅读模式
本帖最后由 batpro 于 2011-7-9 09:30 编辑

在1.txt中有:
版主手下留情,我要用颜色说明情况

============================================================================
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
→  <Vistadrv><C:\Program Files\vsdrv\vsdrv.exe>[]  

→  <AzMixerSel><C:\Program Files\Realtek\InstallShield\AzMixerSel.exe>  [Realtek Semiconductor Corp.]
→  <RTHDCPL><RTHDCPL.EXE>  [Realtek Semiconductor Corp.]
→  <Alcmtr><ALCMTR.EXE>  [Realtek Semiconductor Corp.]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
→  <Adobe Reaed Launcher>[N/A]

===================================================


  1. 如何生成2.txt?
  2. [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
  3. →  <Vistadrv><C:\Program Files\vsdrv\vsdrv.exe>[]
  4. ][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
  5. →  <Adobe Reaed Launcher>[N/A]
复制代码
文件描述下,我的意思是要把1.txt中所有含【含公司数字签名的部分】替换为空,
从而得到2.txt
如何写这代码呢?

评分

参与人数 1PB +2 收起 理由
batman + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2011-7-8 17:38:28 | 显示全部楼层
本帖最后由 batpro 于 2011-7-8 17:42 编辑

这边讨论下我以前的代码

  1. cd.>temp.txt
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in (1.txt) do (
  4. set var=%%i
  5. set "var=!var:[Realtek Semiconductor Corp.]=正常!"
  6. echo !var!>>temp.txt
  7. )
  8. @findstr /v "正常" temp.txt >>2.txt
复制代码
这个代码可以用,但是在实际操作中需要添加太多的白名单了

而[N/A]和[]、[File is missing]只有三项,所有请求下如何写能添加黑名单的代码
 楼主| 发表于 2011-7-8 17:41:19 | 显示全部楼层
如何把上面的代码中
set "var=!var:[Realtek Semiconductor Corp.]=正常!"

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"
 楼主| 发表于 2011-7-8 17:41:19 | 显示全部楼层
如何把上面的代码中
set "var=!var:[Realtek Semiconductor Corp.]=正常!"

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"
发表于 2011-7-8 17:43:38 | 显示全部楼层

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "delims=" %%i IN (1.txt) Do (
  3.   Set "Str=%%i"
  4.   If "!Str!" EQU "!Str:[Realtek Semiconductor Corp.]=!"  Echo !Str!
  5. ))>2.txt
  6. Start 2.txt
复制代码
 楼主| 发表于 2011-7-8 17:47:55 | 显示全部楼层
5# ArdentMan


代码中不应出现:[Realtek Semiconductor Corp.]
因为只是个例子而已,具体值很多 应该出现[N/A]、[]和[File is missing ]
发表于 2011-7-8 17:56:25 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-7-8 17:57 编辑

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "delims=" %%i IN (1.txt) Do (
  3.   Set "Str=%%i"&Set "Flag="
  4.   For %%a IN ("N/A" "File is missing" "") Do (
  5.     If "!Str!" NEQ "!Str:[%%~a]=!" Set "Flag=a"
  6.   )
  7.   If Defined Flag Echo !Str!
  8. ))>2.txt
  9. Start 2.txt
复制代码
 楼主| 发表于 2011-7-8 18:45:45 | 显示全部楼层
本帖最后由 batpro 于 2011-7-8 18:47 编辑

7# ArdentMan

谢谢兄弟的辛苦

不过我要说的是,你给的第一个代码和第二个代码出来的结果不同,结果应该是
  1. [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
  2. →  <Vistadrv><C:\Program Files\vsdrv\vsdrv.exe>[]   
  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
  4. →  <Adobe Reaed Launcher>[N/A]
复制代码
而你的第二个代码只是

这个结果
  1. →  <Vistadrv><C:\Program Files\vsdrv\vsdrv.exe>[]   
  2. →  <Adobe Reaed Launcher>[N/A]
复制代码
错在:其他部分没了
发表于 2011-7-8 18:53:05 | 显示全部楼层

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "delims=" %%i IN (1.txt) Do (
  3.   Set "Str=%%i"&Set "Flag="
  4.   If /I "!Str:~,5!" EQU "[HKEY" Set "Flag=a"
  5.   For %%a IN ("N/A" "File is missing" "") Do (
  6.     If "!Str!" NEQ "!Str:[%%~a]=!" Set "Flag=a"
  7.   )
  8.   If Defined Flag Echo !Str!
  9. ))>2.txt
  10. Start 2.txt
复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-7-8 19:12:48 | 显示全部楼层
9# ArdentMan


太棒了,
坚定的相信这里确实高手如云
我想到的,你能办到
我没想到的,你想到了
所以
谢谢你兄弟,谢谢bathome!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 15:33 , Processed in 0.023465 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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