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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    igor_andreev

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

    Цитата:
    Возможно такое (Для xp)?

    В XP в system32 есть eventquery.vbs. Выдергивай из него, что надо. Типа:
    cscript %systemroot%\system32\eventquery.vbs | find "date" | find "6005"
     
    А параметров комстроки у него много, можно и без find обойтись , хэлп посмотри по /?
    cscript %systemroot%\system32\eventquery.vbs /?

    Всего записей: 1669 | Зарегистр. 08-12-2004 | Отправлено: 15:44 17-04-2007 | Исправлено: igor_andreev, 15:55 17-04-2007
    Tipulatoid



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

    Цитата:
    это означает: на диске /f вo всех папках ?

    Нет, данный код, как я уже говорил работает только для файлов в той папке откуда запущен батник. Папки он не трогает. Сейчас с подсказки Elroir пытаюсь соорудить переименование папок - пока выходит переименовать только папки 1-го уровня вложенности.
     
    Работает так: команда dir /b /a:-d выводит множество всех файлов в папке в столбец (одно название файла - одна строка). Далее с помощью for /f  (/f - это просто ключ команды for) разбираем каждую строку этого множества: tokens=* говорит, что надо взять всю строку целиком (без этого бралось бы только до первого пробела); взятой строке присваиваем имя переменной %%a
     
    далее set name=%%a - назначаем взятой строке еще одно имя переменной - name
     
    далее set name=!name:i=и! - заменяем в значении переменной !name! все символы "i" на "и"
     
    далее set name=!name:ї=йы! - заменяем в значении переменной !name! все символы "ї" на "йы"
     
    В результате первоначальная переменная %%a (т.е. название файла в укр. символах) у нас уже отличается от переменной !name! (название в русс. символах) и у нас есть все что нужно для переименования, что и делаем:
    ren "%%a" "!name!"
     
    Четыре этих команды, отработав для первой строки вывода команды dir /b /a:-d, также обработают 2-ую строку, 3-ью и так до конца множества.
     
    Надеюсь, нормально объяснил

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 16:30 17-04-2007 | Исправлено: Tipulatoid, 03:57 18-04-2007
    Mamontoza



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста
    Мне нужно чтоб создавался полный лог по каждой машине, те у программы  
    program.exe есть пару параметров УСПЕШНО ЗАВЕРШОН, ненайден процес и еще когда неможет зайти на машину говрит что вход невозможе
    а в логе отображаеться только что процесс удачно завершон,, а мне надо чтоб написало все
    taskkill /s %1 /u domain\user name /p pass /f /im program.exe  >%1_kill.log
    %1 - номер машин
     

    Всего записей: 67 | Зарегистр. 19-10-2006 | Отправлено: 16:40 17-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mamontoza
    Добавь в конце строчки "2>&1":

    Код:
     
    taskkill /s %1 /u domain\user name /p pass /f /im program.exe  >%1_kill.log 2>&1
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:57 17-04-2007
    Mamontoza



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir СПАСИБО а тоя голову ломал

    Всего записей: 67 | Зарегистр. 19-10-2006 | Отправлено: 17:21 17-04-2007
    Maza Faka



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

    Цитата:
    Set /a Result=%1 * %Result%. %1=2, Result=1, значит новое значение Result=2*1=2

    Откуда взялся аргумент %1 и почему его значение 2

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:00 17-04-2007
    Mamontoza



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А еще неподскажите  
    уменя этот( taskkill /s %1 /u domain\user name /p pass /f /im program.exe ) батник  (называеться kill.bat) отрабатывает по такому принцыпу
    сначала запускаеться батник с такими задачами
    start kill.bat comp-1
    sleep 15
    start kill.bat comp-2
    sleep 15
    start kill.bat comp-3
    sleep 15
    start kill.bat comp-4
    ...
    и так далее где sleep 15 время простоя 15 секунд до следующей команды
    мне нужно чтоб создался общий лог, те такого формата  
    comp-1
    Процесс program.exe ненайден
    comp-2
    Процесс program.exe завершон
    ВОЗМОЖНО это сделать

    Всего записей: 67 | Зарегистр. 19-10-2006 | Отправлено: 18:17 17-04-2007
    Maza Faka



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

    Цитата:
     пытаюсь соорудить переименование папок - пока выходит переименовать только папки 1-го уровня вложенности.


    Код:
     
    dir /b /a:d /s
     

    Просто добавь параметр /S "для всех вложенных папок"
     
     
    Добавлено:
    Mamontoza

    Цитата:
    нужно чтоб создался общий лог, те такого формата  
    comp-1  
    Процесс program.exe ненайден  
    comp-2  
    Процесс program.exe завершон  
    ВОЗМОЖНО это сделать
     

    Мне твоё решение не понравилось, зачем нужно создавать два батника? Попробуй так:

    Код:
     
    @Echo off
    Set Comps=10
    For /L %%a in (1,1,%Comps%) do (
    taskkill /s comp-%%a /u domain\user name /p pass  /f /im program.exe>>MyLog.txt 2>&1
    Sleep 15)
     

    На 10 компов, нужное тебе количество компов укажешь в переменной, выделено жирным!

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:17 17-04-2007 | Исправлено: Maza Faka, 18:47 17-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    "Call :Factorial %Param%" как будто вызывает новый батниик, начинающийся со строчки ":Factorial" и до конца настоящего батника. При этом %Param% является аргументом командной строки (первым). То есть для виртуального батника :Factorial, %1 - это то, что было передано аргументом при запуске "Call :Factorial %Param%". Последний раз, когда происходит запуск  "Call :Factorial %Param%", - %1=2 (то есть перед этим был запуск "Call :Factorial 2"), высчитывается новое значение Param=%1-1(2-1)=1 и последний раз запускается "Call :Factorial 1".

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:59 17-04-2007
    Mamontoza



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka  
    тогда вопрос еще мне нужно чтоб нумерация шла вот так  
    comp-01
    comp-02
    comp-03...09
    comp-10
    И еще что в логе писался номер компа
    comp-01
    как отработал
    comp-02
    как отработал

    Всего записей: 67 | Зарегистр. 19-10-2006 | Отправлено: 19:09 17-04-2007 | Исправлено: Mamontoza, 19:19 17-04-2007
    InSe0F



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka, спасиб, заценимс

    Всего записей: 532 | Зарегистр. 13-03-2006 | Отправлено: 00:21 18-04-2007
    Tipulatoid



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

    Цитата:
    Просто добавь параметр /S "для всех вложенных папок"

    Не так все просто. Проблемы с переименованием папок 2-го 3-его и т.д. уровня вложенности.
     
    Mamontoza

    Цитата:
    тогда вопрос еще мне нужно чтоб нумерация шла вот так  
    comp-01  
    comp-02  
    comp-03...09  
    comp-10

    Дык она так и идет в коде, предложенном Maza Faka Или тебе обязателен лидирующий нуль?

    Цитата:
    И еще что в логе писался номер компа  
    comp-01  
    как отработал  
    comp-02  
    как отработал

    Поставь команду
    Код:
    echo comp-%%a>>MyLog.txt
    перед строкой
    Код:
    taskkill /s comp-%%a /u domain\user name /p pass  /f /im program.exe>>MyLog.txt 2>&1
    кода Maza Faka

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 03:56 18-04-2007
    Kac



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди где то когда то видел решиние но сейчас в течении полутора часов найти не могу...
    Подскажите как разобрать Строку заданую в SET? Например %Path%.
    Что то типа... Ток у меня не работает...
     
    setlocal enableextension
    for /f "delims=;" %%i in ('%path%') do (echo %%i)
    endlocal

    Всего записей: 41 | Зарегистр. 10-08-2004 | Отправлено: 06:50 18-04-2007
    Maza Faka



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

    Цитата:
    Подскажите как разобрать Строку заданую в SET? Например %Path%.


    Код:
     
    @Echo off
    for /f "delims=; tokens=1-4" %%a in ('PATH') do echo %%a %%b...
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:53 18-04-2007 | Исправлено: Maza Faka, 07:53 18-04-2007
    Kac



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ) Хегеее...
    Нееетт
    Видел универсальный скрипт... такой же простой (все гениальное...)
    Я ж не знаю скоко параметров в Path прописано....
    Нужно их вывести ВСЕ!!
    Path1
    Path2
    Path3
    ...
    PathN

    Всего записей: 41 | Зарегистр. 10-08-2004 | Отправлено: 08:28 18-04-2007
    Maza Faka



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

    Цитата:
    неподскажите как заменить укр буквы в именах файлов\папок "ї" и "і" на др символы, или вовсе их удалить?

    Вот решение, правдо кривое , кривость заключается в том, что по истечении определённого времени, выполнение батника придётся прервать вручную, но главное, что он работает!

    Код:
     
    @echo off
    :renDir
    Chcp 1251
    setlocal enabledelayedexpansion
    For /F %%a in ('dir /b /a:d /s') do (
    set name=%%a
    set name=!name:i=и!
    set name=!name:ї=йы!
    move "%%a" "!name!"
    )
    Goto :rendir
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:59 18-04-2007 | Исправлено: Maza Faka, 09:00 18-04-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kac
    FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
     
    а находится это чудо в for /?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 09:48 18-04-2007
    Mamontoza



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Да мне нужно что был лидирующий ноль начиная 01 и заканчивая 09

    Всего записей: 67 | Зарегистр. 19-10-2006 | Отправлено: 09:54 18-04-2007
    Maza Faka



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

    Цитата:
    Последний раз, когда происходит запуск  "Call :Factorial %Param%", - %1=2 (то есть перед этим был запуск "Call :Factorial 2"), высчитывается новое значение Param=%1-1(2-1)=1 и последний раз запускается "Call :Factorial 1"

     
    Но ведь здесь:
    Код:
     
    Call :Factorial %Param%
    Set /a Result=%Result% * %1
     
     
    значение аргумента %1 должно быть равно "1" и значение "%Result%" равно "1", значит  "1*1=1"
    Вообще не понятна схема, вроде бы в конце при выводе значение "%Result%" должно равнятся "1" , но происходит какой-то обратный отсчёт...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:07 18-04-2007
    slayer120



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

    Цитата:
    есть eventquery.vbs

     Не понравился - сортировать нельзя  по датам, вывод не  
    отсортирован по времени. Выбрал wininternal овский psloglist  
    - гораздо лучше, можно записи сортировать, можно в файле задавать список  
    компов  и другие прелести.
       Осталось создать батник.

    Всего записей: 303 | Зарегистр. 24-01-2007 | Отправлено: 10:29 18-04-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru