Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

   

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 4
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

Всего записей: 9498 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
EXPAND [-r] <источник> <результат>
EXPAND -r <источник> [<результат>]
EXPAND -D <источник>.CAB [-F:<файлы>]
EXPAND <источник>.CAB -F:<файлы> <результат>
 
  -r            Переименование распакованных файлов.
  -D            Отображение всех файлов источника.
  <источник>    Имя и путь к исходному файлу. Допускаются подстановочные знаки.
  -F:<файлы>    Имена файлов для извлечения из .CAB файла архива.
  <результат>   Имя и путь к конечному файлу.
                В качестве результата можно указать каталог.
                Если <источник> описывает несколько файлов и не задан параметр -
r,
                то <результат> должен быть каталогом.

Вот msu + сам expand файлик
_http://km.dnepro.net/e107_files/downloads/expand+msu.rar
 
Добавлено:
Maza Faka
В принцыпе просматривать содержимое не нужно.
Распаковывается файлик 123.msu
получается из него 4 файла:
каб с таким же названием но с расширением cab 123.cab
и эти 3 файла я удаляю за ненадобностью
WSUSSCAN.cab  
.txt (описание каба)  
.xml (сценарий установки, как я понял)
Нам нужно проверить есть ли такое же название файла но с другим расширением

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 19:15 13-06-2007 | Исправлено: moonkir, 19:52 13-06-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
moonkir
Пробуй вот так:

Код:
 
@ECHO OFF  
setlocal enabledelayedexpansion
:Extract  
echo.  
echo                        -=Распаковка обновлений=-  
echo.  
cd msu  
For %%F In ("*.msu") Do Call :Ext %%F  
goto Exit  
:Ext  
echo Распаковывается обновление %1 ...
if defined updall goto continue
if exist  "..\Cab\%~n1.cab" (
echo Update already exists in target directory
set /p choice=Overwrite^(o^),Skip^(s^),Owerwrite All^(a^)?
if "!choice:~0,1!"=="o" goto continue
if "!choice:~0,1!"=="a" (set "updall=true" & goto continue)
goto :EOF  
)
:continue
call ..\tools\servicing\expand -F:* "%1" "..\Cab" > nul  
::Удаление лишних файлов  
del /f /q "..\Cab\*.xml" > nul  
del /f /q "..\Cab\*.txt" > nul  
del /f /q "..\Cab\WSUSSCAN.cab" > nul  
GoTo :EOF  
 
:Exit
 


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:00 13-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ElroirВсе работает, спасибище. Если можно раскажите что к чему ...
не понял вот это:  

Код:
if defined updall goto continue  
if exist  "..\Cab\%~n1.cab"

и это
Код:
set "updall=true" & goto continue

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 21:04 13-06-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
moonkir
"if defined updall goto continue" - если определена переменная updall, пропускаем весь блок проверки и запроса и просто идем к коду распаковки (goto continue) .
"if exist  "..\Cab\%~n1.cab"" - если в директории ..\Cab существует файл с именем переданным как аргумент (файл .msu) и с расширением cab, выполнить команды которые ограничены скобками идущими следом.
"set "updall=true" & goto continue" - тут как раз и определяется переменная updall - я присваиваю ей значение true, но на самом деле подходит любое значение - главное, что переменная после этого уже существует. После определения переменной - переходим к метке :continue (& goto continue).

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:37 13-06-2007
mistik26

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir Огромное спасибо  заранее . покопаюсь в манах ,заранее прошу прощение  если мой вопрос покажеться глупым ,Копировать необходимо директорию ,с кучей поддерикторий и отдельных файлов  как ето лучше организовать в данном случае  ,написать файл индекс типа list.txt в катором будет все перечисленно или есть возможнось копировать всю директорию игнорируя  права доступа  и все  остальные ограничения ?

Всего записей: 23 | Зарегистр. 09-06-2007 | Отправлено: 22:14 13-06-2007
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно тут не стоит постить эту масагу но не знаю где её запостить...
 
В общем проблема есть консольное приложение с кучей ключей и последовательностей ввода команд...
 
Нужно как-то управлять им с консоля , а консоль должен управлять другим приложением...  
т.е. допустим есть ключи для запуска..... приложения , ну батник написать ещё можно в этом случае, а если в приложении нужно вводить какие либо различные команды далее, то как управлять командной строкой с другого приложения?

Всего записей: 3341 | Зарегистр. 20-05-2006 | Отправлено: 22:48 13-06-2007
mistik26

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
'curl' is not recognized as an internal or external command,
operable program or batch file.
вот такое пишет(

Всего записей: 23 | Зарегистр. 09-06-2007 | Отправлено: 23:04 13-06-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mistik26

Цитата:
'curl' is not recognized as an internal or external command

Так скачать его надо
Я же давал ссылку. Скачать, установить и добавить путь к нему в переменную path.

Цитата:
Копировать необходимо директорию  

При беглом просмотре справки по curl, я не нашел, как закачивать всю директорию сразу.
Поэтому, видимо, надо делать список файлов с путями.
Опять же - надо внимательно смотреть справку или искать в сети.

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:24 13-06-2007
mistik26

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
А  )  послерабочий ступор .
Проблемка  состоит ещо в том что файлы в директории могут быть созданы динамически ,и отслеживать каждый файл и добовлять его в индеь проблематично,бум топтать маньки
главное я уяснил что без стороних утелиток  не выскочить .
Большой  сенкс .

Всего записей: 23 | Зарегистр. 09-06-2007 | Отправлено: 08:58 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
:FindDist
IF NOT EXIST "%DISTR%\Sources\Install.wim" (
echo.
echo Не могу найти папку с дистрибьютивом "%DISTR%" - проверьте правильность пути или наличее дистрибьютива
echo.
set /p choice=retry^(r^),cancel^(c^)?  
echo.
if "!choice:~0,1!"=="r" GoTo FindDist
if "!choice:~0,1!"=="c" GoTo Finish
)
 

Неработает выбор что бы не нажал все равно идет дальше выбор появляется, но на нажатие кнопок не реагирует, как будто выбора нет...

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 10:57 14-06-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
moonkir

Код:
@Echo Off
:FindDist
IF EXIST "%DISTR%\Sources\Install.wim" GoTo :EOF
echo.
echo Не могу найти папку с дистрибьютивом "%DISTR%" - проверьте правильность пути или наличее дистрибьютива
echo.
set /p choice=retry^(r^),cancel^(c^)?  
echo %choice%
if /i "%choice:~0,1%"=="r" GoTo FindDist
if /i "%choice:~0,1%"=="c" GoTo :EOF
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:10 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KapralBel
спс
вот так сделал

Код:
:FindDist  
IF EXIST "%DISTR%\Sources\Install.wim" GoTo Findmsu  
echo.  
echo Не могу найти папку с дистрибьютивом "%DISTR%" - проверьте правильность пути или наличее дистрибьютива  
echo.  
set /p choice=Повторить^(r^),Отмена^(c^)?  
if /i "%choice:~0,1%"=="r" GoTo FindDist  
if /i "%choice:~0,1%"=="c" exit  
 

 
Добавлено:
Побеспокою вас еще немного
 
Интегрирую обновления так

Код:
cd cab
For %%F In ("*.cab") Do Call :Add %%F
cd ..
goto Exit
:Add
echo Добавляется пакет %1 ...
call ..\tools\peimg\peimg ..\mount\windows /import=%1 > nul
GoTo :EOF
 

Могу просмотреть какие обновления уже интегированы и установлены

Код:
peimg /list /image=mount\windows
      |6.0.1.0        |  +  | Package_1_for_KB934641
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB934796
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB934907
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935333
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935366
------+---------------+-----+------------------------
      |6.0.2.0        |  +  | Package_1_for_KB935415
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935458
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935607
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935755
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935783
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB935878
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB936054
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB936183
------+---------------+-----+------------------------
      |6.0.1.0        |  +  | Package_1_for_KB936825

+ это значит пакет установлен
- неустановлен
KB936183 - название пакета
Можно как то проверять интегрирован ли пакет
если нет то интегрировать
если есть то спросить пропусть\пропустить все(которые уже интегрированы)\интегрировать

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 12:13 14-06-2007
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
moonkir
Разбор лог файла:

Код:
 
@echo off
for /f "tokens=*" %%a in ('find " - " ^< list.txt') do ^
for /f "tokens=3 delims=| " %%b in ("%%a") do echo %%b
 

выводит список неустановленных пакетов

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:32 14-06-2007 | Исправлено: Maza Faka, 14:34 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maza Faka
Эээ установлен и интегрирован это разные вещи, он может быть интегрирован но не установлен. Вот поэтому и хочу чтобы лишнее не интегрировать сразу проверить интегрирован такой пакет или нет.
Если просто интегрировать

Код:
cd cab  
For %%F In ("*.cab") Do Call :Add %%F  
cd ..  
goto Exit  
:Add  
echo Добавляется пакет %1 ...  
call ..\tools\peimg\peimg ..\mount\windows /import=%1 > nul  
GoTo :EOF

и потом просмотреть  

Код:
peimg /list /image=mount\windows

то вместо + будет -

Код:
peimg /list /image=mount\windows  
      |6.0.1.0        |  -  | Package_1_for_KB934641  
------+---------------+-----+------------------------  
      |6.0.1.0        |  -  | Package_1_for_KB934796  
------+---------------+-----+------------------------  
      |6.0.1.0        |  -  | Package_1_for_KB934907  
------+---------------+-----+------------------------

а после интеграции происходит установка

Код:
peimg /install=* mount\windows

и устанавливаются все обновления (если они не установлены)
вот после этого - превращается в +
А вот хотелось бы на этапе интеграции проверять, есть уже такое обновление или нет, что бы зря не тратить время.
 
Добавлено:

Цитата:
@echo off  
for /f "tokens=*" %%a in ('find " - " ^< list.txt') do ^  
for /f "tokens=3 delims=| " %%b in ("%%a") do echo %%b

тут не ошибка? <  выделено
 
Добавлено:

Цитата:
@echo off  
for /f "tokens=*" %%a in ('find " - " ^< list.txt') do ^  
for /f "tokens=3 delims=| " %%b in ("%%a") do echo %%b

что то у меня такое не работает...
 
Добавлено:
Разобрался, был пробел после do ^
Убрал и фсе заработало.
 
Добавлено:
хм... раз пошла такая карусель
может подскажите команду  
если есть неустановленные обновления, тоесть "-" то идти туда то

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 15:01 14-06-2007 | Исправлено: moonkir, 17:23 14-06-2007
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
moonkir

Цитата:
А вот хотелось бы на этапе интеграции проверять, есть уже такое обновление или нет

Установленные обновления хранятся в виде каталога с файлами?  

Цитата:
Package_1_for_KB934641

Это имя файла?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:24 14-06-2007 | Исправлено: Maza Faka, 17:38 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
дело в том что обновления бывают двух видов
исправления - в имени файла имеют KBxxxxxx
дополнения - дополнения c  обычными с названиями  
вот пример этой папки:
Подробнее...
 
Добавлено:
поэтому проблемно будет в каталоге искать, потому что я незнаю во что привратится KBxxxxx в обновление или дополнение
 
Добавлено:
Значит нада искать по peimg /list /image=mount\windows
 
Добавлено:

Цитата:
Package_1_for_KB934641  
 
 
Это имя файла?

это его краткое имя, полные имена я написал в ПОДРОБНЕЕ выше
 
Добавлено:
Короткое бывает  
Package_1_for_KB934641  
Package_for_KB934641  
А бывает с названием Microsoft-Windows-Winhelp-Update-TopLevel
 
Добавлено:
вот к примеру весь список обновлений при вызове комманды peimg /list /image=mount\windows
 
Подробнее...
 
Добавлено:

Цитата:
хм... раз пошла такая карусель  
может подскажите команду  
если есть неустановленные обновления, тоесть "-" то идти туда то

лушеее думаю так сделать а то столько гемороя...
 
 
Добавлено:
Ну так фо решаем последнюю задачу а то сравнение ну его нафиг
 
Добавлено:
Вообщем так находит "-"

Код:
peimg /list /image=mount\windows >list_intgr_up.txt  
for /f "tokens=*" %%a in ('find " + " ^< list_intgr_up.txt') do ^
for /f "tokens=2 delims=| " %%b in ("%%a") do goto install
echo обновления для установки отсутствуют
goto end
 

 
Добавлено:
Все таки нада проверять на этапе добавления есть ли такие файлы уже. Кто мну поможет ?

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 17:40 14-06-2007 | Исправлено: moonkir, 18:11 14-06-2007
misha1950



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста написать Bat. Для перезагрузки программы с таймаутом 10-20сек.
Спасибо.

Всего записей: 52 | Зарегистр. 11-03-2007 | Отправлено: 21:53 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
misha1950

Код:
@echo off    
start C:\ProgramFiles\ххх.exe    
ping -n 15 localhost > nul    
taskkill /IM ххх.exe  
start C:\ProgramFiles\ххх.exe  


Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 22:12 14-06-2007 | Исправлено: moonkir, 22:13 14-06-2007
misha1950



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
moonkir
 

Цитата:
Код:@echo off      
start C:\ProgramFiles\ххх.exe    
ping -n 15 localhost > nul    
taskkill /IM ххх.exe  
start C:\ProgramFiles\ххх.exe  

 
Он запускает сначала. А мне нужно выключить а потом включить програму.
 
Спасибо

Всего записей: 52 | Зарегистр. 11-03-2007 | Отправлено: 23:47 14-06-2007
moonkir

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
@echo off      
taskkill /IM ххх.exe    
ping -n 15 localhost > nul      
start C:\ProgramFiles\ххх.exe

Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 00:39 15-06-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru