2013-04-10 39 views
0

因此,如果不会变得复杂,我试图完成的要点是我目前通过程序的显示名称列出了reg注册查询的结果,一个数字给它,然后再通过数字来调用它。当它列出结果时,它会使用findstr从列表中过滤特定程序(例如其中包含Microsoft的任何程序),因为我不希望它们成为卸载的选项。现在,它的工作原理基本上,除了它返回这样的:测试注册查询是否为批处理脚本中的特定值

Let's say the programs in the Registry are: 
Microsoft Update (should be filtered) 
Notepad 
Java 
Microsoft Word (should be filtered) 
Yahoo Toolbar 

当我运行此:

: progList64 
cls 
set regVar=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
set opt=64 
echo _______________________________________________________ 
echo. 
echo Please wait while I compile a list of known programs... 
echo _______________________________________________________ 
echo. 
echo %tab%64bit Programs 
echo Index%tab%Name 
set count=0 
for /f "tokens=2,*" %%a in ('Reg Query %regVar% /S^|find " DisplayName"') do (
    set /a count+=1 
    setlocal EnableDelayedExpansion 
    for %%n in (!count!) do (
     endlocal 
     set product[%%n]=%%b 
     echo %%n.%tab%%%b | findstr /V /C:"Microsoft" | findstr /V /C:"Dell" | findstr /V /C:"MDOP" | findstr /V /C:"MED" 
    ) 
) 
echo _______________________________________________________ 
echo. 
echo ============ PRESS 'M' TO GO TO MAIN MENU ============= 
echo. 
goto uninstallerMenu 

我得到这个:

2. Notepad 
3. Java 
5. Yahoo Toolbar 

所以后来当我从数组来调用实际上可以放入1或4,即使没有显示,也可以选择该产品。我试图对其进行过滤,它打印的是只打印我想要的东西,导致在此之前:

1. Notepad 
2. Java 
3. Yahoo Toolbar 

我试着使用不同的IF语句,试图把整个对%%的n(计数! !)部分在IF语句中,用于测试Microsoft,dell等是否在DisplayName中,然后只显示并增加计数器(如果它合适),但这也不起作用。我在这里有什么想法?

而且没有关系,也不是很重要,但是有谁知道过滤的一种更好的方法,而不是对整行findstr语句进行代码链接?像排除列表或其他东西?

回答

1

在快速猜测,试试,FOR循环之前,(比如说后SET COUNT...

set excluded=Microsoft Dell MDOP MED 

然后FIND " Displayname"

这应该过滤掉任何后级联

|findstr /v "%excluded%" 

空格分隔的单词excludeme

然后可以删除您现有的级联findstr,因为这些名称在内部for循环之前被删除,因此也不会获取数字。

参见 findstr /?

从提示docco ...

+0

伟大的作品,唯一的问题是有一些对他们有空间(即Configuration Manager客户端),我要排除,但不希望排除所有的一对夫妇计划用配置或经理或客户端的话来编程。另外,空白名称呢?只需使用空引号? – Flynn 2013-04-10 18:09:26

+0

在'...“%excludeme%”'之后层叠'findstr/v/i/c:“配置管理器”'。 '/ c'使'findstr'精确地查找指定的单词 - 包括空格。 /我可能或不想要 - 使测试不区分大小写。 – Magoo 2013-04-10 18:20:35

+0

太棒了,效果很棒!谢谢 – Flynn 2013-04-10 18:21:57