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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    можно еще другой командой  
     sc start MyService

    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 07:48 31-01-2017
    Kavar

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


    Цитата:
    И как называется сам батник ?

    restart.bat
     

    Цитата:
    Может заменить net на %SystemRoot%\System32\net.exe  


    Цитата:
    можно еще другой командой  
     sc start MyService

     
    Вечером испытаю. напишу потом.

    Всего записей: 112 | Зарегистр. 12-04-2004 | Отправлено: 08:09 31-01-2017 | Исправлено: Kavar, 08:12 31-01-2017
    Kavar

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Полный путь к net ничего не дал, а вот комманда sc в лог записала:
    [SC] OpenService: ошибка: 5:
    Отказано в доступе.

     
    Короче, в задании планировщика не стояла галочка "запускать с наивысшими правами".
     
    Вручную из Тотал Коммандер запускал, а он у меня по умолчанию "От имени администратора" запускается вот и упустил этот момент.
     
    Всем спасибо - на мысль навели )

    Всего записей: 112 | Зарегистр. 12-04-2004 | Отправлено: 05:12 01-02-2017
    Gosuto



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

    Код:
    Function OnFirstParentExit
    Dim objWMIService, objProcess, colProcess
    Dim strComputer, strProcessKill
    strComputer = "."
    strProcessKill = "'Program.exe'"
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill )
    For Each objProcess in colProcess
    objProcess.Terminate()
    Next
    End Function

    Он для завершения программы в ThinApp сборке.
    Дело в том, что Program.exe в процессе работы может запустить вспомогательную программу Program2.exe тоже из этой сборки.
    Так вот, при закрытии ThinApp сборки Program.exe завершается, а Program2.exe (если запускалась) - не хочет, висит в процессах. Приходится вручную, а это криво.
     
     
    Добавлено:

    Код:
    Function OnFirstParentExit
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.run "taskkill /f /im Program.exe /t", 0
    End Function

    А это вообще не работает.

    Всего записей: 5619 | Зарегистр. 09-11-2015 | Отправлено: 16:57 01-02-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Коллеги, прошу помочь в решении следующей задачи.
    Есть необходимость в создании более-менее универсальной процедуры (функции) для проверки текстовой строки (полного маршрута к файлу) на наличие в ней запрещённых наименований и символов. Так вот, после нескольких дней писанины, по сути, элементарного кода, чтения ru-boarda, cyberforuma и активного яндексирования Интернета, что-то вроде получилось. Однако, остались следующие вопросы:
    1. Как можно ещё экранировать символ знак процента (%) во входных данных.
    Да, я знаю, что его требуется удваивать, но так как идёт посимвольный разбор строки и изначально не известно где этот символ, и есть ли он вообще, то это не очень удобно. Можно, конечно, к каждому символу из строки присоединять ещё и символ процента, но, по мне, это смахивает на какой-то "костыль".
    2. Как надёжно экранировать строку при передаче от одной части процедуры к другой, если в ней могут быть (а могут и не быть) спецсимволы и изначально неизвестно на каких позициях они находятся.
    Так как хотелось сделать процедуру модульной (так, как в школе учили ;) ), то имеет место пересылка входных данных между частями процедуры и здесь начинают вылезть ошибки. Можно, конечно, не размазывать данные по коду, но при этом потеряется модульность и универсальность, как мне кажется.
    3. Есть ли, может быть, уже готовые решения или подскажите как это всё можно оптимизировать.
    Ну, и собственно, что наваял. Уж не судите строго.
     

    ----------
    Помни, правильно заданный вопрос это половина ответа
    Те, кто жили до нас, многое свершили, но ничего не завершили. Сенека

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 23:48 04-02-2017 | Исправлено: latin, 23:55 04-02-2017
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    latin
    2. Использовать для манипуляций со строкой исключительно delayed expansion. Соответственно, все переменные раскрывать по "!". При этом, вероятно, отпадет и вопрос 1.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 00:07 05-02-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    Да, это, наверное, вариант.
    Попробую.
     
    Добавлено:
    Подождите, а как быть с восклицательным знаком (!) внутри строки?
     
    Добавлено:
    А нет. Сейчас поищу. Здесь уже рассказывали как его правильно экранировать.
    Спасибо на наводку, буду пробовать. Вообще, как мне показалось, в скриптовом языка cmd/bat столько неоднозначностей и условностей, и официальная документация не раскрывает всех нюансов.

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 00:47 05-02-2017
    GCRaistlin



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

    Цитата:
    а как быть с восклицательным знаком (!) внутри строки?


    Цитата:
    Здесь уже рассказывали как его правильно экранировать.

    В том-то и дело, что его не надо экранировать.

    Код:
     
    set a=!foobar!
    setlocal enabledelayedexpansion
    echo !a!
     


    ----------
    Magically yours
    Raistlin

    Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 01:17 05-02-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    К сожалению не работает. Точнее не всегда и не со всеми спецсимволами.
    как пример:
    Код:
    set strTstPth=c:\di<|:r\!directory\
    - не работает

    Код:
    set "strTstPth=c:\di<|:r\!directory\"
    - работает

    Код:
    set "strTstPth=c:\di<|:r\!dire"ctory\"
    - не работает (точнее, работает, если экранировать дополнительными кавычками, но тогда не работает если в строке нет кавычек)

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 01:00 07-02-2017 | Исправлено: latin, 01:02 07-02-2017
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    latin
    Не уловил, откуда берется эта мегастрока. Если вводится с клавиатуры через SET /P, то проблем нет. Если берется из файла через FOR /F, тоже проблем нет. Если передается параметром скрипта... то такое не передашь.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 01:15 07-02-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    Передаётся, но не параметром скрипта, а на метку через call (хотя это то же самое). Вернее ошибка вываливается при проверке переданного параметра.
    Код:
    if ""=="%~1" (exit /b -1)

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 02:07 07-02-2017 | Исправлено: latin, 02:08 07-02-2017
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    latin
    Так не передавайте ее параметром. Заранее присвойте значение переменной, а в подпрограмме его анализируйте.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 12:06 07-02-2017
    LuTTiy



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, уважаемые мастера.
    Помогите пожалуйста решить такую задачу.
    Имеется куча директорий, нужно чтобы содержимое каждой директории (все содержимое и поддиректории, если таковые будут встречаться) архивировалось winrar в отдельный архив с названием этой же директории.
    Заранее извиняюсь, если криво поставил вопрос.
    Спасибо.

    Всего записей: 63 | Зарегистр. 10-09-2006 | Отправлено: 23:29 11-02-2017
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LuTTiy
    Куча директорий - каким образом задаётся?..
    Если они все лежат в одной, то где-то так:
    pack_it.cmd
    Код:
    @echo off
    set "ROOTFOLDER=x:\path to\root folder"
    set "RAREXE=c:\Program files\Winrar\WinRar.exe"
    set "BACKUPFOLDER=y:\path to\backup folder"
     
    pushd "%ROOTFOLDER%" || call :ERR "Can't access %ROOTFOLDER%!"
    pushd "%BACKUPFOLDER%" && popd || call :ERR "Can't access %BACKUPFOLDER%!"
    if NOT EXIST "%RAREXE%" call :ERR "Can't find WinRar!"
     
    for /f "delims=" %%A in ('dir /b /A:D *') do (
    "%RAREXE%" a -m5 -ep1 -r -- "%BACKUPFOLDER%\%%A.rar" "%%A\*"
    )
    popd
    goto :EOF
     
    :ERR
    echo Critical error: %~1
    echo Aborting execution.
    pause
    exit


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 01:34 12-02-2017 | Исправлено: BorlandIMHO, 01:48 12-02-2017
    LuTTiy



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    Огромное спасибо. То что надо.

    Всего записей: 63 | Зарегистр. 10-09-2006 | Отправлено: 13:31 12-02-2017 | Исправлено: LuTTiy, 13:31 12-02-2017
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Гуру, прошу помощи. Есть логфайл вида

    Код:
    [02] Sun 12Feb17 00:12:26 - (001944) Connected to XX.XXX.XXX.XXX (local address 192.168.151.100, port 22)
    [03] Sun 12Feb17 00:12:26 - (001944) IP-Name: xxxxx.planet-telecom.eu (XX.XXX.XXX.XXX)
    [30] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:26 - (001944) Invalid login credentials; user: "admin"; password: "**********"
    [31] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_FAILURE: login failed
    [30] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:26 - (001944) Invalid login credentials; user: "admin"; password: "**********"
    [31] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_FAILURE: login failed
    [30] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:26 - (001944) Invalid login credentials; user: "admin"; password: "**********"
    [02] Sun 12Feb17 00:12:26 - (001944) Password wrong too many times for user "admin" - disconnecting
    [31] Sun 12Feb17 00:12:26 - (001944) SSH2_MSG_USERAUTH_FAILURE: login failed
    [02] Sun 12Feb17 00:12:26 - (001944) Closed session
    [02] Sun 12Feb17 00:12:27 - (001945) Connected to XX.XXX.XXX.XXX (local address 192.168.151.100, port 22)
    [03] Sun 12Feb17 00:12:27 - (001945) IP-Name: xxxxxx.planet-telecom.eu (XX.XXX.XXX.XXX)
    [30] Sun 12Feb17 00:12:27 - (001945) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:27 - (001945) Invalid login credentials; user: "admin"; password: "**********"
    [31] Sun 12Feb17 00:12:27 - (001945) SSH2_MSG_USERAUTH_FAILURE: login failed
    [30] Sun 12Feb17 00:12:27 - (001945) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:27 - (001945) Invalid login credentials; user: "admin"; password: "**********"
    [31] Sun 12Feb17 00:12:27 - (001945) SSH2_MSG_USERAUTH_FAILURE: login failed
    [30] Sun 12Feb17 00:12:28 - (001945) SSH2_MSG_USERAUTH_REQUEST: user: admin; service: ssh-connection; type: password
    [02] Sun 12Feb17 00:12:28 - (001945) Invalid login credentials; user: "admin"; password: "**********"
    [02] Sun 12Feb17 00:12:28 - (001945) Password wrong too many times for user "admin" - disconnecting
    [31] Sun 12Feb17 00:12:28 - (001945) SSH2_MSG_USERAUTH_FAILURE: login failed
    [02] Sun 12Feb17 00:12:28 - (001945) Closed session
    ...

    нужно вычленить IP-адреса, которые ломятся на сервер. По моему разумению, нужно начать разбор с номера записи (в примере 001944 и 001945) и уже внутри каждого такого пространства парсить запросы типа "admin" и пр. и соответственно IP. Но как это сделать, ума у меня не хватает


    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 17:52 12-02-2017
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft Если IP , которые начинаются на XX.XXX.XXX.XXX  c локальными 192.168, то так можно:

    Код:
     
    for /f "tokens=9,4  delims= " %%a in ('type ip.txt ^| find "192.168"') do @echo %%b
     

     


    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 15:02 14-02-2017 | Исправлено: ipmanyak, 15:03 14-02-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft
    Если только
    Цитата:
    нужно вычленить IP-адреса
    то зачем
    Цитата:
    парсить запросы типа "admin" и пр
    Или ставьте задачу корректнее

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 17:44 14-02-2017
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    Нужно вычленить внешние IP XX.XXX при условии наличия стандартных логинов admin, root, user в области каждой записи (001944 и 001945).

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 19:30 14-02-2017 | Исправлено: Free_Soft, 08:58 16-02-2017
    PG7

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как вывести переменную, содержащую точки с запятой, без обрамления кавычками?
     
    Если поставить её
    echo %str%
    будет выдаваться ошибка на точках с запятой.
    Если закавычить
    echo "%str%"
    будент выдаваться корректно, но обрамляться кавычками.
     
    А без кавычек можно как-нибудь?

    Всего записей: 6 | Зарегистр. 16-03-2007 | Отправлено: 18:25 16-02-2017 | Исправлено: PG7, 18:25 16-02-2017
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru