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

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



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set comps=10
    for /l %%a in (1,1,%comps%) do (
       if %%a leq 9 (set comp_num=0%%a) else (set comp_num=%%a)
       echo comp-!comp_num!>>MyLog.txt
       taskkill /s comp-!comp_num! /u domain\user name /p pass /f /im program.exe>>MyLog.txt 2>&1
       sleep 15
    )

    Maza Faka
    Спасиб, умную мысль подсказал. Сейчас наваяю полное решение задачи Gabzya

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 10:51 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!" | Find "Перемещено" && Goto renDir
    )
     

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Да, спасибо. Я думал прикрутить счетчик, но твой вариант лучше.
    Gabzya
    Вот полное решение твоей задачи (с помощью Maza Faka):

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    set first_symb=i
    set second_symb=ї
    set third_symb=I
    set forth_symb=Ї
     
    :rendir
    for /f "tokens=*" %%a in ('dir /b /a:d /s') do (
       set dirname=%%a
       set dirname=!dirname:%first_symb%=и!
       set dirname=!dirname:%second_symb%=йы!
       set dirname=!dirname:%third_symb%=И!
       set dirname=!dirname:%forth_symb%=ЙЫ!
       move "%%a" "!dirname!" 2>nul | find "Перемещено" && goto rendir
    )
     
    :renfiles
    for /f "tokens=*" %%a in ('dir /b /a:-d /s') do (
       set filename=%%~nxa
       set filename=!filename:%first_symb%=и!
       set filename=!filename:%second_symb%=йы!
       set filename=!filename:%third_symb%=И!
       set filename=!filename:%forth_symb%=ЙЫ!
       ren "%%a" "!filename!"
    )

     
    Заменяет "неудобные" символы на русские аналоги во всех файлах и подпапках любого уровня вложенности начиная с текущей папки, откуда батник запущен.  
    Выделенные жирным символы в начале батника надо забить самому, используя украинскую раскладку клавиатуры.

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



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

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



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

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

    Например так:

    Код:
     
    @echo off
    call :show "%path%"
    goto :EOF
    :show
    for /f "tokens=1* delims=;" %%a in (%1) do (
    echo %%a
    if not "%%b"=="" call :show "%%b"
    )
     

     
    Добавлено:
    Maza Faka

    Цитата:
    значение аргумента %1 должно быть равно "1" и значение "%Result%" равно "1", значит  "1*1=1"

    Посмотри внимательно батник, когда значения %1 равно один, батник вообще не доходит до строчек Call :Factorial %Param% и Set /a Result=%1 * %Result%. Батник обрабатывает сравнение If "%1"=="1" выполняет Set Result=1 и выходит (возвращается) в предыдущий батник, в котором, %1 равен 2.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:01 18-04-2007 | Исправлено: Elroir, 13:22 18-04-2007
    Kac



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

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



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

    Цитата:
    Хм... ну не даун

    Уважаемый! Ну ошибся человек, не так понял вопрос, оскорблять-то зачем? Тем более, что двумя постами выше, тебе дали правильный ответ на твой вопрос!
     
    P.S. Впредь, будь добр, формулируй вопросы правильно.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 Maza Faka
    Не в коем случае! Тем более человека предложившего вариант ОСКОРБЛЯТЬ НЕ ХОТЕЛ! НЕ СОБИРАЛСЯ! И Я НЕ ДЕЛАЛ ЭТОГО! Видимо поняли меня не правильно! Говорил что я НЕ ТУПОЙ ЮЗВЕРЬ! и прежде чем обращаться СЮДА!!! явно не раз почитал МАНуал
    Простите ВСЕ кто увидел в моих словах обидное в свой адрес!
    Не в коем случае....
     
    Пример который я ищу выглядел так
    set Servers=S21,S2,S3,...Sn
    for для каждого сервера из%Servers% сделать пинг
    ...
    Все..

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kac
    Сформулируй уже задачу толково Тебе список серверов известен? Если да, то проблем нет - приведи его. Если неизвестен - то откуда ты его взять собираешься?
    И еще совет. Вверху этой страницы нажми "Версия для печати" Загрузится весь топик целиком. Далее Ctrl+F забиваешь ping и ищешь

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



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kac
    Каким образом формируется
    Цитата:
    set Servers=S21,S2,S3,...Sn

    Если построчно - то обработка будет легче

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:28 18-04-2007
    AlessTO

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плиз, сценарий на vbs - запуск сервиса (службы) - в скрытом режиме..

    Всего записей: 253 | Зарегистр. 09-12-2006 | Отправлено: 17:49 18-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kac
    Я же привел код, который разбирает строку в переменной!
    Если разделителем у тебя является запятая, а не точка с запятой как в Path, тогда в коде надо заменить "delims=;" на "delims=,".

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kac
    Извини, я неправильно тебя понял.
    Насчёт примера, который ты ищешь, что-то я не могу его найти...Лучше опиши подробно задачу.

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

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

    Код:
    Dim objWshShell
     
        Set objWshShell = CreateObject("WScript.Shell")
     
        objWshShell.Run "net start nameService", 0, false

    Всего записей: 253 | Зарегистр. 09-12-2006 | Отправлено: 20:09 18-04-2007
    InSe0F



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

    Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 07:29 19-04-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Насчёт факториала, спасибо за обьяснение, разобрался, как я понял, в последний раз :Factorial вызывается с параметром %1=1, но из-за того, что функция не доходит до конца, а прерывается по условию, значением %1 остаётся прошлый удачный вызов %1=2, вот только почему все вызовы функции сохраняются и подсчитываются, происходит что-то вроде счётчика?

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    весело...
    В общем так...
    Надо вывести на экран числа вот так...
    1
    2
    3
    4
    5
    6
    ...
    их я в команднике задаю так...
    set SRV=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
    далее пытаюсь вывести на экран...
    FOR /F "usebackq delims=," %%i IN (%SRV%) DO (@echo %%i)
    Говорит ошибка.. файл 1 не найден...
    Кроме ДНК в чем ошибка?
    Спасибо

    Всего записей: 41 | Зарегистр. 10-08-2004 | Отправлено: 09:48 19-04-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kac
    1. Т.к. ФОР разбирает построчно - то тебе надо будет прописать
    FOR /F "tokens=1-16 delims=," %%a in (...) Do Echo %%a %%b %%c...
    2. FOR /F - разбирает файл
    Делай файл Server
    1
    2
    3
    4
    5
    6

    Тогда легче будет и управлять и править

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:31 19-04-2007
    Tipulatoid



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

    Цитата:
    В общем так..

    Если я правильно понял твою задачу, то максимальное конечное число - каждый раз меняется. Тогда так:

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    echo Введите максимальное число . . .
    set /p input=
     
    for /l %%a in (1,1,%input%) do (
       echo %%a
       set srv=!srv!,%%a
    )
     
    set srv=%srv:~1%
    echo %srv%
     

     
    Кроме того, автоматически образовывается переменная %srv%, кот. содержит нужную тебе строку. Делай с ней дальше что хошь.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 11:09 19-04-2007
    Maza Faka



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

    Цитата:
    Надо вывести на экран числа вот так...  
    1  
    2  
    3  
    4  
    5  
    6

    Elroir ведь написал тебе решение:

    Код:
     
    @echo off
    Set SRV=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
    call :show "%SRV%"
    :show
    for /f "tokens=1* delims=," %%a in (%1) do (
    echo %%a
    if not "%%b"=="" call :show "%%b"
    )
     


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:52 19-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru