Board logo

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

作者: batpro    时间: 2011-7-8 17:24     标题: [已解决]批处理如何去除含特定字符的项(特定字符不止一个)?

本帖最后由 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
如何写这代码呢?
作者: batpro    时间: 2011-7-8 17:38

本帖最后由 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]只有三项,所有请求下如何写能添加黑名单的代码
作者: batpro    时间: 2011-7-8 17:41

如何把上面的代码中
set "var=!var:[Realtek Semiconductor Corp.]=正常!"

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"
作者: batpro    时间: 2011-7-8 17:41

如何把上面的代码中
set "var=!var:[Realtek Semiconductor Corp.]=正常!"

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"
作者: ArdentMan    时间: 2011-7-8 17:43

  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
复制代码

作者: batpro    时间: 2011-7-8 17:47

5# ArdentMan


代码中不应出现:[Realtek Semiconductor Corp.]
因为只是个例子而已,具体值很多 应该出现[N/A]、[]和[File is missing ]
作者: ArdentMan    时间: 2011-7-8 17:56

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

作者: batpro    时间: 2011-7-8 18: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]
复制代码
错在:其他部分没了
作者: ArdentMan    时间: 2011-7-8 18:53

  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
复制代码

作者: batpro    时间: 2011-7-8 19:12

9# ArdentMan


太棒了,
坚定的相信这里确实高手如云
我想到的,你能办到
我没想到的,你想到了
所以
谢谢你兄弟,谢谢bathome!






欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2