|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник дописывает сам себя |
|
CMD/BAT - [решено] Батник дописывает сам себя
|
Ветеран Сообщения: 2196 |
Профиль | Отправить PM | Цитировать Заинтересовался вопросом, как сделать так, чтобы батник сам себя проверял и дописывал (стирал) при условии наличия файлов. Как записать переменную исполняемого батника? Типа накидал файлов, запустил скрит. Он сам себя собрал и начал установку.
|
|
Отправлено: 19:47, 15-05-2011 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата sov44:
Цитата 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
|
Профиль | Отправить 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. ) ) |
Отправлено: 21:44, 04-07-2011 | #12 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата sov44:
Вот что получится, если в папке лежат: 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% |
|
Отправлено: 22:17, 04-07-2011 | #13 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать gora, в том то и дело, что оба цикла должны работать одновременно: один записывает в Echo полное имя msp, а второй только значение КВ.
И так дальше, дописывая Echo, перебирая все msp. Именно это и не получается. |
Отправлено: 22:31, 04-07-2011 | #14 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:38, 04-07-2011 | #15 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать Цитата gora:
start /wait msiexec /update KB2289163 /qb- Set /a i+= 1 ECHO Установка обновления KB2289163 завершена - %i% |
|
Последний раз редактировалось sov44, 05-07-2011 в 00:01. Отправлено: 22:59, 04-07-2011 | #16 |
Ветеран Сообщения: 2196
|
Профиль | Отправить 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. ) |
Отправлено: 23:58, 04-07-2011 | #17 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
ВОПРОСЫ и Ответы ДЛЯ 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 |
|