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

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

Модерирует : KLASS, IFkO

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 8
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6, часть 7)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...Приветствую всех.
     
    Может и мне поможете чем...
    Проблема такая -
     
    Пишу батник. Это будет своего рода "Менеджер удаленного управления сервисами и процессами".
    Сразу скажу что это - реализация для "блондинок"...
     
    1- Вообщем нужна комманда которая показывала бы список СЛУЖБ НА УДАЛЕННОМ компе по фильтру.
    Задача этой утилиты - останавливать и запускать СЛУЖБЫ НА УДАЛЕННОМ КОМПЕ в локалке домена...
    Права адимина есть...
    В ручную прописывать - не вариант...
     
    2- Список этих служб должен быть автоматически пронумерован! (это наверное если и выполнимая задача - то очень не легкая)...
    Это для того что бы нажав НОМЕР СЛУЖБЫ выполнялась следующая комманда - остановка или запуск ЭТОЙ СЛУЖБЫ...
     
    Вот на этом и застрял - выручайте пожалуйста...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 22:32 29-04-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    sc /?
    Уильям Станек - Командная строка Microsoft Windows
    список служб можно еще так посм.

    Код:
    reg query \\remotecomp\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:39 29-04-2010 | Исправлено: mugil_cephalus, 00:16 30-04-2010
    Mark_Titov



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

    Цитата:
    Mark_Titov  
    sc /?  
    Уильям Станек - Командная строка Microsoft Windows

    Да. Спасибо. Это хорошо. Но как тут все это упорядочить?
    Это же для "блондинок" и номера что бы были???
     
    Комманда - sc query подходит.
    Но она прямо все вываливает -  
     
     
    SERVICE_NAME: helpsvc
    DISPLAY_NAME:
            TYPE               : 20  WIN32_SHARE_PROCESS
            STATE              : 4  RUNNING
                                    (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x0
            WAIT_HINT          : 0x0
     
    SERVICE_NAME: JavaQuickStarterService
    DISPLAY_NAME: Java Quick Starter
            TYPE               : 10  WIN32_OWN_PROCESS
            STATE              : 4  RUNNING
                                    (STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x0
            WAIT_HINT          : 0x0
     
     
    ...Другими словами БЛОНДИНКА не разберется тут что и как запускать или останавливать.
    Вот таже запись - но упорядоченная -
     
    1 SERVICE_NAME: helpsvc
       STATE              : 4  RUNNING
           
    2 SERVICE_NAME: JavaQuickStarterService
       STATE              : 4  RUNNING
     
    Вот тут блондинка разберется. Такое вообще возможно?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 00:11 30-04-2010
    mugil_cephalus

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

    Код:
    sc query |findstr /i "SERVICE_NAME: STATE"
    pause

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 00:28 30-04-2010
    Mark_Titov



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

    Цитата:
    sc query |findstr /i "SERVICE_NAME: STATE"  
    pause

    Вот! То что надо... Огромное спасибо mugil_cephalus.
    А как еще фильтр туда прикрутить?
    Там есть условие - вывод определенных сервисов... По расширению (exe)...
    Там будут конвертированные батники в exe в качестве сервисов. И вот их все надо отфильтрововать от всех остальных...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 00:33 30-04-2010 | Исправлено: Mark_Titov, 00:42 30-04-2010
    mugil_cephalus

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

    Код:
    cd\
    setlocal enabledelayedexpansion
    set "cnt=1"
    for /f "tokens=*" %%i in ('sc query ^|findstr /i "SERVICE_NAME: STATE"') do (
    echo.%%~i|1>nul 2>&1 find /i "SERVICE_NAME:" &&(
    echo.!cnt!. %%~i
    set /a cnt=!cnt!+1
    ) ||echo.%%~i
    )

     
    Добавлено:
    Mark_Titov

    Цитата:
    Там есть условие - вывод определенных сервисов... По расширению (exe)...  

    покажи пример - посмотрим как отфильтровать

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 00:45 30-04-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exe-шники начинаются с 00-80-9F-..-..-.. .exe
    И таких на данный момент 10 шт. Сделанны как службы...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 06:50 30-04-2010
    mugil_cephalus

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

    Цитата:
    exe-шники начинаются с 00-80-9F-..-..-.. .exe  

    а вытаскиваешь ты это какой командой, типа так - sc qc winmgmt ?
    и в вывод нужно получить только эти 10 служб, отсеев другие?
     
    а почему нельзя их фильтровать не по имени екзешника, а по SERVICE_NAME - ???

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:58 30-04-2010 | Исправлено: mugil_cephalus, 10:24 30-04-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да.
     
    Типа - sc start\stop 00-80-9F-..-..-.. .exe >nul (на удаленной машине - в локалке)

    Цитата:
    и в вывод нужно получить только эти 10 служб, отсеев другие?

    Да. Отфильтровать только их...
    Цитата:
    а почему нельзя их фильтровать не по имени екзешника, а по SERVICE_NAME - ???

    Можно и по имени сервиса конечно - просто я подумал что так легче будет. Да и с таким расширением больше небудет там служб у меня...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 11:14 30-04-2010 | Исправлено: Mark_Titov, 11:16 30-04-2010
    duh_S

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

    Код:
     
    ...& for /f "tokens=1-2 delims=:" %%j in ("!Value:%Key%=!") do set "Value=%%k"
     

    Всего записей: 66 | Зарегистр. 28-08-2007 | Отправлено: 12:49 30-04-2010
    mugil_cephalus

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

    Код:
    @echo off
    cd\
    set "sernum=1"
    for /f "tokens=*" %%i in ('sc query ^|findstr /i "SERVICE_NAME: STATE"') do call:_1 "%%~i"
    pause
    goto:eof
     
    :_1
    if /i "_%bifurc%" equ "_true" goto:_2
    echo.%~1|find /i "SERVICE_NAME:" |1>nul 2>&1 findstr /i "AudioSrv MDM winmgmt" &&(
    echo.%sernum%. %~1
    set /a sernum=%sernum%+1
    set "bifurc=true"
    goto:eof
    ) ||goto:eof
     
    :_2
    echo.%~1
    set "bifurc="
    goto:eof

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:03 30-04-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus - Супер. Спасибо.
    А как теперь сделать так что бы вводя эти цифры - 1+enter=действие (net start\ net stop)?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 14:29 30-04-2010
    kilserg



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

    Цитата:
    kilserg
    А зачем так сложно?

    Сложно - потому что не знаю еще всего инструментария, а сделать надо было
     

    Цитата:
    FINDSTR /B /C:"строка поиска" aaa.txt||(ECHO строка поиска>>aaa.txt)  

     
    О, спасибо, как раз ответ на мой вопрос: "можно ли в одну строку без сторонних утилит"

    Всего записей: 12 | Зарегистр. 20-10-2009 | Отправлено: 21:17 30-04-2010 | Исправлено: kilserg, 22:23 30-04-2010
    user5nov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, помогите написать 2 батника, по следующим задачам.
     
    1. Подсчет количества фалов в папке и подпапке с выводом количества в текстовый файл.
    2. Подсчет объёма в папке и подпапке с выводом объема в текстовый файл.
     
    В обоих случаях, вложенность фалов и папок большая. Это файловый сервер.

    Всего записей: 112 | Зарегистр. 19-10-2005 | Отправлено: 23:14 30-04-2010 | Исправлено: user5nov, 23:15 30-04-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    user5nov
    Цитата:
    1. Подсчет количества фалов в папке и подпапке с выводом количества в текстовый файл.  
    все же комментарий в текстовый файл допишу, на будущее. Без него - можно сильно сократить.

    Код:
    for /f %%a in ('dir /b/s/a-d c:\papka\* ^| find /c /v ""') do 1>>file.txt echo.%%a files

     

    Цитата:
    2. Подсчет объёма в папке и подпапке с выводом объема в текстовый файл.  


    Код:
    for /f "tokens=3" %%a in ('dir /s/a-d c:\papka\* ^| findstr /r /b /c:"^[ 0-9]*File(s)"') do set sizetxt=%%a
    1>>file.txt echo %sizetxt: =% bytes
    подчеркнут неразрывный пробел, поаккуратнее

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 03:46 01-05-2010 | Исправлено: wolf0425, 04:08 01-05-2010
    user5nov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Спасибо большое за помощь, помогло, но:
    1. В этом батнике при каждом выполнении в файл дописывается число, можно ли сделать так чтобы файл перезаписывался при каждом выполнении с новым числом, тоесть каждое выполнение один и тотже файл, и только одно число.?
     
    2. Скрипт несработал ((
    Файл создается но "= bytes", без цифр
    Где-то накосячился я, непойму где
    Кстати сдесь тоже нужно чтобы файл перезаписывался.

    Всего записей: 112 | Зарегистр. 19-10-2005 | Отправлено: 09:41 01-05-2010 | Исправлено: user5nov, 09:44 01-05-2010
    Ortios



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

    Цитата:
    Где-то накосячился я

    ) угу, винду теперь на анлийскую переставляй, если лень, тогда так:

    Код:
    for /f "tokens=3" %%a in ('dir /s/a-d c:\papka\* ^| findstr /r /b /c:"^[ 0-9]*файлов"') do set sizetxt=%%a  
    1>>file.txt echo %sizetxt: =% bytes


    Цитата:
    чтобы файл перезаписывался

    1>file.txt

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 10:35 01-05-2010
    user5nov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ortios Спасибо, большое. Всё получилось.
     
    Добавлено:
    Потестив скрипты выяснил, что они не понимают ни русских папок, ни папок на латинице с пробелами. Подскажите как исправить эти проблемы ?

    Всего записей: 112 | Зарегистр. 19-10-2005 | Отправлено: 11:07 01-05-2010 | Исправлено: user5nov, 11:09 01-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто подскажет как сделать что бы в ОТОБРАЖЕНИИ этой команды не было надписи -
    "DISPLAY_NAME:"
     
    Вот код -

    Код:
     
    @echo off
    set "sernum=1"
    for /f "tokens=*" %%i in ('sc query state^= all ^|findstr /i "Windows"') do call:_1 "%%~i"
    pause
    :_1  
    echo.%sernum%. %~1
    set /a sernum=%sernum%+1
    goto:eof

    А вот результат -

    Код:
     
    1. DISPLAY_NAME: Windows Audio
    2. DISPLAY_NAME: Windows Installer
    Для продолжения нажмите любую клавишу . . .

    1- Что тут лишнее?
    2- Как отфильтровать эти процессы по типу запуска - если запущен то ОТОБРАЖАЕТСЯ в окне, если НЕ ЗАПУЩЕН, то НЕ ОТОБРАЖАЕТСЯ в окне?
    Заранее благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 15:41 01-05-2010 | Исправлено: Mark_Titov, 17:06 01-05-2010
    wolf0425



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

    Цитата:
    Потестив скрипты выяснил, что они не понимают ни русских папок, ни папок на латинице с пробелами. Подскажите как исправить эти проблемы ?

    вообще-то они и то и другое понимают, проблема не в скриптах
    пути/имена с пробелами надо заключать в кавычки
    если в текст батника вписываешь русское имя файла/папки - то надо или вписывать имена в команде в ДОС кодировке, или при исполнении батника текущую кодировку заменять на виндовую. В смысле - кодировка русских букв в командах должна совпадать с текущей кодировкой cmd.exe на момент исполнения строки.
     
    типа так:

    Код:
    chcp 1251
    dir "c:\русская папка\*"

     
    Добавлено:Mark_Titov
    Цитата:
    Кто подскажет как сделать что бы в ОТОБРАЖЕНИИ этой команды не было надписи -  


    Код:
    for /f "tokens=1*" %%a in ('sc query state^= all ^|findstr /i "Windows"') do call:_1 "%%~b"  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:40 01-05-2010 | Исправлено: wolf0425, 18:39 01-05-2010
       

    Страницы: 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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru