因此,如果不會變得複雜,我試圖完成的要點是我目前通過程序的顯示名稱列出了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