Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Список обновлений KB

Ответить
Настройки темы
CMD/BAT - Список обновлений KB

Ветеран


Сообщения: 2205
Благодарности: 730


Конфигурация

Профиль | Отправить PM | Цитировать


Нужна помощь в написании скрипта по выводу всех обновлений типа КВ* в разделе и подразделах HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
начал примерно так
Код: Выделить весь код
@ECHO OFF
SetLocal enabledelayedexpansion

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
set "upd=%%a"
if /i "!upd:~0,2!"=="KB" echo !upd!
)
pause

Отправлено: 14:08, 10-10-2011

 

Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Доработал код, но есть одно "но":
Код: Выделить весь код
@Echo off
SetLocal enabledelayedexpansion
if exist "%ProgramFiles(x86)%" (set bit=x64) else (set bit=x86)
Title Поиск отсутствующих обновлений для Windows %bit%
wmic qfe get HotFixID >temp.txt
.\iconv\iconv -c -f UTF-16LE -t CP866 temp.txt > CheckUpdates.txt
del /S /Q temp.txt >nul
for /f "Tokens=1 Delims=" %%a in ('FindStr /IB "KB" "CheckUpdates.txt"') do Call :files %%a
goto :EOF

:files
For /F "Tokens=2 Delims=-" %%b in ('Dir /B ".\%bit%\*.msu"') Do Call :matching %1 %%b

:matching
if "%1"=="%2" (echo Обновление %1 присутствует в папке %~dp0%bit%>>%~n0.log) 
if "%2"=="" (echo Обновление %1 отсутствует в папке %~dp0%bit%>>%~n0.log)
При %%a==%%b, должно происходить следующее сравнение значения переменной %%a с множеством значений переменной %%b, а получается так, что даже когда переменные %%a, и %%b равны, то сравнение %%a идет до тех пор, пока значения %%b не закончатся, и тогда выполняется условие ""=="".

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 10:52, 06-02-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Что-то ни как не получается довести до ума. Может кто подскажет, где ошибка?

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 12:13, 21-03-2012 | #12


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Devils0411, попробуйте так:
Код: Выделить весь код
@Echo off
SetLocal enabledelayedexpansion
if exist "%ProgramFiles(x86)%" (set bit=x64) else (set bit=x86)
Title Поиск отсутствующих обновлений для Windows %bit%
wmic qfe get HotFixID >temp.txt
Type temp.txt >CheckUpdates.txt
del /S /Q temp.txt >nul
(for /f "Tokens=1 Delims=" %%a in ('FindStr /IB "KB" "CheckUpdates.txt"') do (
	Set kb=%%a
	Set kb=!kb: =!
	Call :files !kb!
	echo Обновление !kb! !flag! в папке %~dp0%bit%
))>%~n0.log
Pause>nul

:files
Set flag=отсутствует
For /F "Tokens=2 Delims=-" %%k in ('Dir /B "%bit%\*.msu"') Do If %%k==%1 Set flag=присутствует& goto :EOF
goto :EOF

Последний раз редактировалось gora, 21-03-2012 в 13:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:33, 21-03-2012 | #13


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


В папке Office_Updates находятся два типа файлов *.msp (шестизначные КВ типа KB907417-OTKLOADR.msp, KB981716-MSACCESS.msp и семизначные КВ типа KB2535812-POWERPNT.msp, KB2598253-GDIPLUS.msp) Необходимо вывести в Echo в порядке возрастания номеров сначала шестизначные КВ9.., затем семизначные КВ2..

сделал немного криво, может есть более оптимальное решение:
Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion

for /f %%a in ('dir /b/on "Office_Updates\*.msp"') do (
set up1=%%a
if /i "!up1:~2,1!"=="9" (echo !up1!)
)
for /f %%a in ('dir /b/on "Office_Updates\*.msp"') do (
set up2=%%a
if /i "!up2:~2,1!"=="2" (echo !up2!)
)

pause
exit

Последний раз редактировалось sov44, 20-10-2012 в 21:07.


Отправлено: 20:41, 20-10-2012 | #14


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Попробуйте так:
читать дальше »
Код: Выделить весь код
Option Explicit

Const adInteger  =   3
Const adVarChar  = 200


Dim objRegExp
Dim objFile


Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
	.IgnoreCase = True
	.Pattern = "KB(\d{6,7}).*\.msp"
End With

With WScript.CreateObject("ADOR.Recordset")
	With .Fields
		.Append "KB FileName",                  adVarChar, 2^8 - 1
		.Append "KB Number",                    adInteger
	End With
	
	.Open
	
	For Each objFile In WScript.CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments.Item(0)).Files
		If objRegExp.Test(objFile.Name) Then
			.AddNew
			
			.Fields.Item("KB FileName").Value = objFile.Name
			.Fields.Item("KB Number").Value   = CLng(objRegExp.Execute(objFile.Name).Item(0).SubMatches.Item(0))
		End If
	Next
	
	.Sort = "[KB Number]"
	
	.MoveFirst
	
	Do Until .EOF
		WScript.Echo .Fields.Item("KB FileName")
		.MoveNext
	Loop
	
	.Close
End With

Set objRegExp = Nothing

WScript.Quit 0

Путь к папке указывайте аргументом скрипта, наподобие:
Код: Выделить весь код
cscript.exe //nologo "c:\Scripts\This Script.vbs" "c:\Projects\Office_Updates"

Отправлено: 21:16, 20-10-2012 | #15


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Iska, нужен именно батник, т.к. в дальнейшем Echo будет посылаться как аргумент для создания ini

Отправлено: 21:20, 20-10-2012 | #16


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


sov44, попробуйте так:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set fldr=e:\Temp 1\Office_Updates

For /F %%a In ('Dir "%fldr%" /B /A:-D') Do (
	Set ta=%%~nxa
	If "!ta:~8,1!"=="-" (
		Set $!ta:~0,2!0!ta:~2,6!=%%~nxa
	) Else (
		Set $!ta:~0,9!=%%~nxa
	)
)
For /F "Tokens=2 Delims==" %%a In ('Set $KB') Do Echo %%a
Pause>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:33, 20-10-2012 | #17


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата sov44:
т.к. в дальнейшем Echo будет посылаться как аргумент для создания ini »
Посылайте:
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
	`cscript.exe //nologo "c:\Scripts\This Script.vbs" "c:\Projects\Office_Updates"`
) do echo %%i

endlocal
exit /b 0

кто мешает .
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:52, 20-10-2012 | #18


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


gora, поясните пожалуйста код. В частности не понятно, куда девается ноль после КВ и где идёт сортировка

Отправлено: 23:09, 20-10-2012 | #19


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата sov44:
где идёт сортировка »
Сортировка выполняется командой Set $KB, которая выводит список всех переменных начинающихся с $KB в алфавитном порядке.
Цитата sov44:
куда девается ноль после КВ »
Нуль есть в имени переменной, а выводится значение переменной, в котором сохранено имя и расширение файла без изменений. Пример:
Код: Выделить весь код
$KB0907417=KB907417-OTKLOADR.msp
$KB0981716=KB981716-MSACCESS.msp
$KB2535812=KB2535812-POWERPNT.msp
$KB2598253=KB2598253-GDIPLUS.msp
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:27, 20-10-2012 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Список обновлений KB

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Общее - Список текущих обновлений Windows VISTA prokazzza Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 123 10-01-2011 20:07
Службы - [решено] Не виден список обновлений. Mura1708 Microsoft Windows Vista 2 07-01-2010 21:17
Список текущих обновлений Windows XP Vadikan Автоматическая установка Windows 2000/XP/2003 546 09-12-2009 19:09
Полный список обновлений для server2003 Diesel315 Microsoft Windows NT/2000/2003 11 10-02-2009 01:01
Разное - Список доступных обновлений для Windows Vista SamLab Microsoft Windows Vista 8 08-09-2008 22:40




 
Переход