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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    wolf0425



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

    Цитата:
    Перечитай внимательно справку, от региональных настроек данное выражение не зависит, так как является уникальным, раз, во-вторых,  
    что-то не нашел я где в хэлпе по cmd написно что формат %time% НЕ зависит от региональных настроек, если нашел ты - надо скорее в Микрософт написать, может исправят (справку). это во-первых.
    во вторых точно знаю что зависит и знаю как в этом за минуту убедиться, и последний раз проверял не так давно.

    Цитата:
    А если хотите повыпендриваться или просто облить гразью, для этого есть ПМ.
    а в третьих для того чтобы давать кому-то такие советы - надо сначала научиться им следовать самому, а не кичиться тем что невнимательно прочел справку и начал считать себя самым умным.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:32 13-06-2010 | Исправлено: wolf0425, 13:42 13-06-2010
    WesternLight

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

    Цитата:
    Та версия батника что под красным шрифтом трет нафиг все индивидуальные установки консольных программ, если хоть одна из них имеет терминал дежурным фонтом. Жестко, зато кардинально и попутно вычищает всякие настройки длс программ, в которых пару лет назад настройки консоли правили. В принципе - одних праивльно сделанных дефолтовых настроек  - практически всем и должно хватать, кому не хватит - заново поправить не проблема....  

    wolf0425, спасибо! Это и есть результат, который был нужен, даже больше... Не обессудь, но буду вынужден обратиться еще раз

    Цитата:
    если ты не в курсе, то и не гни пальцы, дескать "я побольше твоего знаю". Похоже справку тут к cmd.exe никто не читал, если заверяют, что  

    ComradG, если это обращено мне, то совершенно не в тему... Я пытался узнать новое для себя, действительно нигде не читал про такие конструкции

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 12:43 13-06-2010 | Исправлено: WesternLight, 12:45 13-06-2010
    mugil_cephalus

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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    for /R "%systemroot%\inf\" %%a in (oem*.inf) do (
    set "cnt=%%~na"
    set "cnt=!cnt:~3!"
    if !cnt! lss 1 dpinst.exe /U "%%a" /S /D
    if !cnt! gtr 20 dpinst.exe /U "%%a" /S /D
    )
    set "cnt="
    pause

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:47 13-06-2010
    res2001



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:10 13-06-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    получается help расходиться с практикой?
    При включенной расширенной обработке команд доступны несколько переменных
    среды, которые не отображаются в списке, отображаемом при вызове команды SET.
    Значения этих переменных вычисляются динамически каждый раз при их извлечении.
    Если пользователь явно задает переменные с одним из этих имен,
    то это определение перекрывает соответствующее динамическое определение,
    описанное ниже:
     
    %CD% - раскрывается в строку текущей директории.
     
    %DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.
     
    %TIME% - раскрывается в текущую дату, используя формат команды TIME.
     
    %RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.
     
    %ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL
     
    %CMDEXTVERSION% - раскрывается в текущее значение версии
                        расширенной обработки команд.
     
    %CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала
    командный процессор.

    Код:
    set "var=%time%__%random%%random%%random%-%cd%%cd%%cd%-%SESSIONNAME%%SESSIONNAME%%SESSIONNAME%-%PATHEXT%%PATHEXT%%PATHEXT%%PATHEXT%%PATHEXT%__check-%time%"
    pause

    G:\scripts\TEST>set "var=13:17:44,70__321672148011370-G:\scripts\TESTG:\scripts\TESTG:\scripts\TEST-ConsoleConsoleConsole-.COM;.EXE;.BAT;.CMD;.VB
    S;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.SYS2.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.SYS2.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    ;.PSC1;.SYS2.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.SYS2.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.SYS2__check-13:17:44,70"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:22 13-06-2010
    WesternLight

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

    Цитата:
    Та версия батника что под красным шрифтом трет нафиг все индивидуальные установки консольных программ, если хоть одна из них имеет терминал дежурным фонтом. Жестко, зато кардинально и попутно вычищает всякие настройки длс программ, в которых пару лет назад настройки консоли правили. В принципе - одних праивльно сделанных дефолтовых настроек  - практически всем и должно хватать, кому не хватит - заново поправить не проблема....  

    wolf0425, вот и обращаюсь снова. Хотел проверить как reg.exe от XP работает в W7, прописал путь к reg.exe, лежащему в одной с батником директории

    Цитата:
    "%CD%\reg.exe"

    про usebackq в for /f не забыл, хотя надо ли? После запуска: первое окно c кракозябрами за которыми прячется сообщение "Системе не удается найти указанный путь", дальше перезапуск продолжается бесконечно, сообщение о не найденном пути отображается корректно в каждом следующем окне... Что тут не так?

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 13:38 13-06-2010
    wolf0425



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

    Цитата:
    получается help расходиться с практикой?  
    не, получается что хэлп прав, не прав я.
    Действительно могут быть глюки и употреблять %time% более одного раза на строку - не стоит.
    на миллион строк поймал 26 расхождений в секундах между двумя %time% в строке.
    расхождений в минутах - не было, но это вопрос количества.
     
    т.е. через промежуточную переменную надо делать, если редкие ошибки недопустимы.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:44 13-06-2010 | Исправлено: wolf0425, 15:16 13-06-2010
    obla4ko4240019



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

    Цитата:
    а что делать с oem0 ?

    я думаю, не важно. Например тоже удалять. Главное, чтобы можно было указываать то, что удалять не надо.
     
    Добавлено:
    mugil_cephalus

    Цитата:
    ты писал -
    Цитата:
    а как не удалять заданные номера или диапазон, т.е. oem1-oem20 например? а oem21-oem140 удалять?

    тех файлов, что нужно удалять, будет меньше, поэтому их удобнее будет указывать. К тому же они будут фиксированы, а 20-140 будут варьиролваться и увеличиваться..
     
    Добавлено:
    mugil_cephalus

    Цитата:
    Код:
    @echo off
    setlocal enabledelayedexpansion
    for /R "%systemroot%\inf\" %%a in (oem*.inf) do (
    set "cnt=%%~na"
    set "cnt=!cnt:~3!"
    if !cnt! lss 1 dpinst.exe /U "%%a" /S /D
    if !cnt! gtr 20 dpinst.exe /U "%%a" /S /D
    )
    set "cnt="
    pause  

    поясни, пожалуйста. Не понимаю весь код.

    Всего записей: 3275 | Зарегистр. 14-09-2005 | Отправлено: 13:48 13-06-2010
    Mark_Titov



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

    Цитата:
    Mark_Titov  
    start "" sc query

    ...Спасибо. res2001
     
    Поставил паузу после команды - окно все равно закрывается.
    Как прописать что бы паузу слушалось?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 14:17 13-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    obla4ko4240019
    Цитата:
    поясни, пожалуйста. Не понимаю весь код.
    весь не понимаешь или какую-то сроку пояснить надо?  
    весь - писать многовато. если кратко -  
    сначала в !cnt! выделяется численное значение из oem*.inf
    потом оно сравнивается на < 1 и на >20
    по результату сравнения запускается dpinst
     
     
    Mark_Titov

    Цитата:
    Поставил паузу после команды - окно все равно закрывается.  
    логично - пауза будет относиться к текущему коду, а не к окну
    к новому окну - например так:
    Код:
    start "" cmd /c "sc query & pause"


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:07 13-06-2010 | Исправлено: wolf0425, 15:13 13-06-2010
    Mark_Titov



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

    Цитата:
    к новому окну - например так:

    ...Благодарю, класс wolf0425.
    Скажи, а как сделать что бы этот код -

    Код:
    set "sernum=1000"  
    for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (  
    if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title ‚›ЏЋЌџ…’‘џ ЏЋ€‘Љ ЋЃљ…Љ’Ћ‚: %%b  
    if /i .%%a equ .DISPLAY_NAME: (  
    echo %%b  
    set /a sernum += 1  
    set "_service_!sernum:~1!=!_servicen_!"  
    set "_serviced_!sernum:~1!=%%b"  
    )  
    )

    открывался так же в отдельном окне, как это ты сделал в предыдущей команде? И так же что бы в конце пауза была.
    Пытался скрутить их в месте - никак не получается...
     
    Спасибо большое...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 15:36 13-06-2010 | Исправлено: Mark_Titov, 15:42 13-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mark_Titov
    выдели код в отдельный батник и запускай его startом. В конец нового батника можно и паузу воткнуть.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:59 13-06-2010
    wolf0425



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

    Цитата:
    выдели код в отдельный батник и запускай его startом.  
    или в отдельную часть текущего батника, и вызывать себя рекурсивно, с ветвлением по стартовому ключу.
     
    не, конечно в принципе никто не запрещает впихнуть этот код в одну дииииинную строку и вызвать её стартом - но код станет нечитаемым и трудноредактируемым.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:17 13-06-2010 | Исправлено: wolf0425, 16:20 13-06-2010
    obla4ko4240019



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

    Цитата:
    весь не понимаешь или какую-то сроку пояснить надо?  
    весь - писать многовато. если кратко -  
    сначала в !cnt! выделяется численное значение из oem*.inf
    потом оно сравнивается на < 1 и на >20
    по результату сравнения запускается dpinst  

    теперь понял, спасибо!
    mugil_cephalus
    спасибо огромное! помог очень.

    Всего записей: 3275 | Зарегистр. 14-09-2005 | Отправлено: 16:26 13-06-2010
    Mark_Titov



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

    Цитата:
    выдели код в отдельный батник и запускай его startом. В конец нового батника можно и паузу воткнуть.

    ...В том то и дело что нужно с одного окна именно КОМАНДУ ПЕРЕДАВАТЬ В ДРУГОЕ ОКНО CMD, А НЕ БАТНИКА.
     

    Цитата:
    или в отдельную часть текущего батника, и вызывать себя рекурсивно, с ветвлением по стартовому ключу.

    ...что-то на подобие этого.
     
    Я пытаюсь делать так -
     

    Код:
    :20
    TITLE SERVICES MANAGER
    CLS
    echo.
    ECHO  *************************************************** МЕНЮ ***************************************************
    ECHO  ************************************************************************************************************
    ECHO.
    ECHO.
    ECHO                                       1. Servise
    ECHO.  
    ECHO                                       0. Выход из меню
    ECHO.
    ECHO.
    ECHO.
    set /p reply= Введите номер и нажмите Enter:  
    IF /I "%reply%"=="1" GOTO :service
    GOTO :20
     
    :service
    start "" cmd /c
    set "sernum=1000"  
    for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (  
    if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scaning: %%b  
    if /i .%%a equ .DISPLAY_NAME: (  
    echo %%b  
    set /a sernum += 1  
    set "_service_!sernum:~1!=!_servicen_!"  
    set "_serviced_!sernum:~1!=%%b"  
    )  
    )  
    pause
    GOTO :20

    Нужно что бы при нажатии 1+enter в отдельном окне были все сервисы удаленной машины (%server%) в таком виде как в этом коде и в том же окне в конце pause была...
    ...и ни как не получается. Помогите скрутить это по-человечески.

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 16:38 13-06-2010 | Исправлено: Mark_Titov, 16:39 13-06-2010
    NIKZZZZ



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

    Цитата:
    Нужно что бы при нажатии 1+enter в отдельном окне были все сервисы удаленной машины

     

    Код:
    if "%1"=="/service" GOTO :service
    :20
    TITLE SERVICES MANAGER
    CLS
    echo.
    ECHO  *************************************************** МЕНЮ ***************************************************
    ECHO  ************************************************************************************************************
    ECHO.
    ECHO.
    ECHO                                       1. Servise
    ECHO.  
    ECHO                                       0. Выход из меню
    ECHO.
    ECHO.
    ECHO.
    set /p reply= Введите номер и нажмите Enter:  
    IF /I "%reply%"=="1" start "" call "%~dp0Имя этого батника" /service
    GOTO :20
     
    :service
    @echo off
    set "sernum=1000"  
    for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (  
    if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scaning: %%b  
    if /i .%%a equ .DISPLAY_NAME: (  
    echo %%b  
    set /a sernum += 1  
    set "_service_!sernum:~1!=!_servicen_!"  
    set "_serviced_!sernum:~1!=%%b"  
    )  
    )  
    pause
    exit

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:02 13-06-2010 | Исправлено: NIKZZZZ, 17:03 13-06-2010
    Mark_Titov



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

    Цитата:
    IF /I "%reply%"=="1" start "" call "%~dp0Имя этого батника" /service

    Но это НЕ БАТНИК, ты не правильно понял это должна быть команда передающаяся в cmd.exe.
    И в открывшемся этом новом окне должны быть все сервися удаленной машины со статусом RUNNING или STOPED.
     
    Вт зта команда отлично подходит к моей задаче -

    Код:
    start "" cmd /c "sc query & pause"

    Но там сервисы без статусов - запущены они или нет.
     
    Спасибо...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 17:14 13-06-2010
    wolf0425



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

    Цитата:
    Но там сервисы без статусов - запущены они или нет.  
    как это без статусов, когда со статусами.

    Код:
    SERVICE_NAME: wuauserv
    DISPLAY_NAME: Automatic Updates
            TYPE               : 20  WIN32_SHARE_PROCESS
            STATE              : 4  RUNNING


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:19 13-06-2010
    Mark_Titov



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

    Цитата:
    Цитата:Но там сервисы без статусов - запущены они или нет.  
     
    как это без статусов, когда со статусами.  
     
    Код:SERVICE_NAME: wuauserv  
    DISPLAY_NAME: Automatic Updates  
            TYPE               : 20  WIN32_SHARE_PROCESS  
            STATE              : 4  RUNNING

    ...извиняюсь, не так выразился. Статусы не упорядоченные. Там они прямо напротив и все красиво и понятно.
    А тут все в разброс... Вот надо статусы на против самих сервисов сделать в этом окне...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 17:23 13-06-2010 | Исправлено: Mark_Titov, 17:24 13-06-2010
    NIKZZZZ



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

    Цитата:
    Но это НЕ БАТНИК, ты не правильно понял это должна быть команда передающаяся в cmd.exe.  

    Возможно, я неправильно что-то понял, но что мешает передать в батник саму команду?
     

    Код:
    start "" Call service.cmd "sc query"

     
    service.cmd :
     

    Код:
    %~1
    pause
    exit

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:26 13-06-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