因此,如果不会变得复杂,我试图完成的要点是我目前通过程序的显示名称列出了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语句进行代码链接?像排除列表或其他东西?
伟大的作品,唯一的问题是有一些对他们有空间(即Configuration Manager客户端),我要排除,但不希望排除所有的一对夫妇计划用配置或经理或客户端的话来编程。另外,空白名称呢?只需使用空引号? – Flynn 2013-04-10 18:09:26
在'...“%excludeme%”'之后层叠'findstr/v/i/c:“配置管理器”'。 '/ c'使'findstr'精确地查找指定的单词 - 包括空格。 /我可能或不想要 - 使测试不区分大小写。 – Magoo 2013-04-10 18:20:35
太棒了,效果很棒!谢谢 – Flynn 2013-04-10 18:21:57