Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Батник дописывает сам себя

Ветеран


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


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

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


Заинтересовался вопросом, как сделать так, чтобы батник сам себя проверял и дописывал (стирал) при условии наличия файлов. Как записать переменную исполняемого батника? Типа накидал файлов, запустил скрит. Он сам себя собрал и начал установку.
Код: Выделить весь код
Set Cnt=0
For %%I In (*.msp) Do (
echo %%I
Set /A Cnt += 1
> txt.txt start /wait msiexec /update %%I /qb-^^!
> txt.txt Set /a cntA += 1
> txt.txt ECHO Установка обновления !cntA! завершена
)
Echo Количество обновлений - %Cnt%
pause

Отправлено: 19:47, 15-05-2011

 

Googler


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

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


Цитата sov44:
Не получается записать %%I »
Код: Выделить весь код
>>"Inst.cmd" Echo For %%%%I In (*.msp) Do Set /A Cnt += 1
Цитата sov44:
Как сделать по умолчанию кнопку "Нет" и присвоить кнопкам действие? »
Код: Выделить весь код
@echo off
echo WScript.Quit(MsgBox(WScript.Arguments(0),vbYesNo+vbDefaultButton2,WScript.Arguments(1)))>"%temp%\MsgBox.vbs"
WScript "%temp%\MsgBox.vbs" "Установить обновления?" "пример"
If %ERRORLEVEL% equ 6 (echo Выбрана установка обновлений.) else (
echo Получен отказ от установки обновлений.)
del /q "%temp%\MsgBox.vbs"

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

Отправлено: 05:08, 17-05-2011 | #11



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

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


Ветеран


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

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


Хочу улучшить скрипт установки обновлений, записывая в одно Echo одно и тоже данное из двух циклов. Не получается.
Код: Выделить весь код
for /f "delims=-." %%a in ('dir/b/a-d kb*.msp') do (
set nam=%%a
For %%I In (*.msp) Do (
>>"Inst.cmd" Echo start /wait msiexec /update %%I /qb-!
>>"Inst.cmd" Echo Set /a i+= 1
>>"Inst.cmd" Echo ECHO Установка обновления !nam! завершена          - %%i%%
>>"Inst.cmd" Echo.
)
)
в Inst.cmd должно получиться так:
Код: Выделить весь код
start /wait msiexec /update KB2288613-usp10-rus.msp /qb-
Set /a i+= 1
ECHO Установка обновления KB2288613 завершена          - %i%

Отправлено: 21:44, 04-07-2011 | #12


Аватара для gora

Ушёл из жизни


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

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


Цитата sov44:
записывая в одно Echo одно и тоже данное из двух циклов »
Данное не одно и тоже по Вашему скрипту.
Вот что получится, если в папке лежат: KB2416472.msp, KB2473228.msp, NDP40-KB2478663.msp
Код: Выделить весь код
start /wait msiexec /update KB2416472.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2416472 завершена          - %i%

start /wait msiexec /update KB2473228.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2416472 завершена          - %i%

start /wait msiexec /update NDP40-KB2478663.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2416472 завершена          - %i%

start /wait msiexec /update KB2416472.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2473228 завершена          - %i%

start /wait msiexec /update KB2473228.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2473228 завершена          - %i%

start /wait msiexec /update NDP40-KB2478663.msp /qb-!
Set /a i+= 1
ECHO Установка обновления KB2473228 завершена          - %i%
В вашем коде !nam! просто заменил на %%a

Отправлено: 22:17, 04-07-2011 | #13


Ветеран


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

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


gora, в том то и дело, что оба цикла должны работать одновременно: один записывает в Echo полное имя msp, а второй только значение КВ.
И так дальше, дописывая Echo, перебирая все msp. Именно это и не получается.

Отправлено: 22:31, 04-07-2011 | #14


Аватара для gora

Ушёл из жизни


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

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


А так?
Код: Выделить весь код
@Echo Off
for /f "delims=-" %%a in ('dir/b/a-d kb*.msp') do (
>>"Inst.cmd" Echo start /wait msiexec /update %%a /qb-!
>>"Inst.cmd" Echo Set /a i+= 1
>>"Inst.cmd" Echo ECHO Установка обновления %%~na завершена          - %%i%%
>>"Inst.cmd" Echo.
)

Отправлено: 22:38, 04-07-2011 | #15


Ветеран


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

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


Цитата gora:
А так? »
не подойдёт, т.к. %%a в Inst.cmd равна %%~na
Код: Выделить весь код
start /wait msiexec /update KB2289163 /qb-
Set /a i+= 1
ECHO Установка обновления KB2289163 завершена          - %i%
Должно быть типа
Код: Выделить весь код
start /wait msiexec /update KB2288613-usp10-rus.msp /qb-
Set /a i+= 1
ECHO Установка обновления KB2289163 завершена          - %i%

Последний раз редактировалось sov44, 05-07-2011 в 00:01.


Отправлено: 22:59, 04-07-2011 | #16


Ветеран


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

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


Решение похоже нашел
Код: Выделить весь код
For %%I In (*.msp) Do (
set nam=%%I
>>"Inst.cmd" Echo start /wait msiexec /update !nam! /qb-!
>>"Inst.cmd" Echo Set /a i+= 1
>>"Inst.cmd" Echo ECHO Установка обновления KB!nam:~2,7! завершена         - %%i%%
>>"Inst.cmd" Echo.
)
однако не могу додумать, как убрать дефис после имени длиной менее 9 знаков.
Код: Выделить весь код
start /wait msiexec /update KB924423-v2-outlhol-rus.msp /qb-
Set /a i+= 1
ECHO Установка обновления KB924423- завершена         - %i%

Отправлено: 23:58, 04-07-2011 | #17


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
For %%I In (*.msp) Do (
	Set nam=%%~nI
	Rem отрезаем от имени без расширения все, что может быть до KB (например, Windows6.1-KB2511455-x86.msp)
	Set nam=!nam:*KB=KB!
	Rem теперь KB у нас первое, делим имя по разделителю '-' и берем только первую часть
	For /f "delims=-" %%a In ("!nam!") Do (
		>>"Inst.cmd" Echo start /wait msiexec /update %%I /qb-^^!
		>>"Inst.cmd" Echo Set /a i+= 1
		>>"Inst.cmd" Echo ECHO Установка обновления %%a завершена         - %%i%%
		>>"Inst.cmd" Echo.
	)
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:06, 05-07-2011 | #18


Ветеран


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

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


gora, всё работает как надо!
Прошу помочь с альтернативным вариантом написания скрипта с убиранием дефиса из имени длиной менее 9 символов ( до КВ никаких символов нет ). Скрипт не работает.
Код: Выделить весь код
@echo off
del/f Inst1.cmd
For %%I In (*.msp) Do (
set nam=%%I

if %nam:~0,9%==%nam:~0,8%- set rrr=%nam:~0,8% else rrr=%nam:~0,9%

>>"Inst1.cmd" Echo start /wait msiexec /update !nam! /qb-^^!
>>"Inst1.cmd" Echo Set /a i+= 1
>>"Inst1.cmd" Echo ECHO Установка обновления !rrr! завершена         - %%i%%
>>"Inst1.cmd" Echo.
)

Отправлено: 19:31, 05-07-2011 | #19


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
del /f /Q Inst1.cmd
For %%I In (*.msp) Do (
	set nam=%%~nI
	if "!nam:~0,9!"=="!nam:~0,8!-" (set rrr=!nam:~0,8!) else set rrr=!nam:~0,9!
	>>"Inst1.cmd" Echo start /wait msiexec /update %%I /qb-^^!
	>>"Inst1.cmd" Echo Set /a i+= 1
	>>"Inst1.cmd" Echo ECHO Установка обновления !rrr! завершена         - %%i%%
	>>"Inst1.cmd" Echo.
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:12, 05-07-2011 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
ВОПРОСЫ и Ответы ДЛЯ FAQ по Linux (сам задал - сам ответил :) ) ruslandh Общий по Linux 5 04-09-2017 10:59
Батник + групповые политики Dudee Microsoft Windows NT/2000/2003 21 09-06-2010 10:23
Разное - Батник и сеть _Gans_ Программирование и базы данных 3 20-11-2008 10:19
[решено] БАТНИК VS РЕЕСТР matios Автоматическая установка Windows 2000/XP/2003 4 28-12-2007 00:14
Комп сам включается и сам выключается... Gor2 Непонятные проблемы с Железом 40 15-11-2006 14:49




 
Переход