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

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

本帖最后由 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
如何写这代码呢?
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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]只有三项,所有请求下如何写能添加黑名单的代码

TOP

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

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"

TOP

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

变成:[任意值除了【N/A】/【】/【File is missing】]=正常!"

TOP

  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
复制代码
一路飘过的鸟~~~

TOP

5# ArdentMan


代码中不应出现:[Realtek Semiconductor Corp.]
因为只是个例子而已,具体值很多 应该出现[N/A]、[]和[File is missing ]

TOP

本帖最后由 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
复制代码
一路飘过的鸟~~~

TOP

本帖最后由 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]
复制代码
错在:其他部分没了

TOP

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

评分人数

    • batman: 乐于助人PB + 2 技术 + 1
一路飘过的鸟~~~

TOP

9# ArdentMan


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

TOP

返回列表