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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    можно ли каким либо образом запустить екзешник из планировщика, чтобы UAC на него не реагировал?
    Использую такую конструкцию:

    Код:
    schtasks /create /tn "myTask" /tr My.exe /sc daily /mo 29 /f

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 22:13 25-09-2010
    NIKZZZZ



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

    Цитата:
    На выходе получим bat с относительным путем?

    Нет, надо вручную заменить путь на переменную, которая определена в начале батника.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:25 25-09-2010
    wolf0425



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

    Цитата:
    Есть вопрос в bat-файлах можно задействовать "двойную" рекурсию?  
    поясни что имеешь в виду

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 22:57 25-09-2010
    LomikXP

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
     
    Например, рекурсивный вызов, в котором еще два рекурсивных вызова.

    Код:
     
    :процедура аргумент1 аргумент2
       операции или выход
       call :процедура x y
       call :процедура a b
    exit /b
     

    Я пробовал, но у меня терялись параметры для второго вызова.

    Всего записей: 8 | Зарегистр. 18-07-2008 | Отправлено: 23:18 25-09-2010 | Исправлено: LomikXP, 23:20 25-09-2010
    Taran2ul



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

    Всего записей: 451 | Зарегистр. 18-02-2008 | Отправлено: 23:45 25-09-2010
    01MDM



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

    Цитата:
    Например, рекурсивный вызов, в котором еще два рекурсивных вызова.

    Т.е. процедура вызывает сама себя два раза?
    Не знаю правильно ли понял:

    Код:
     
    @echo off
    setlocal
     
    :1
    if not defined arg1 (
    if not defined arg2 (set "arg1=true") else (
        echo %1 %2
        set "arg1="
        set "arg2=true"
    )) else (
        echo %1 %2
        goto:eof
    )
        
    call:1 1 2
    call:1 3 4
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:00 26-09-2010
    Free_Soft



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

    Код:
    schtasks /create /tn "myTask" /tr My.exe /sc daily /mo 29 /f

    как сюда еще можно прикрутить

    Код:
    REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 0 /f

    Если так

    Код:
    schtasks /create /tn myTask /tr "'%SystemRoot%\system32\cmd.exe' /k %SystemRoot%\system32\REG.exe ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 0 /f && '%SystemRoot%\system32\My.exe'" /sc daily /mo 29 /f

    то срабатывает, но окно консоли, выполневшей REG ADD остается открытой до завершения приложения. Как его можно скрыть ну или хотя бы, чтобы оно лишь мелькнуло?
     
    Добавлено:
    Наверно сделать две задачи? Первую с [/RU ""]
    Как тогда их разнести во времени, учитывая параметр
    Код:
    /sc daily /mo 29
    ? ведь так они выполняются с точностью до минуты, секунды не учитываются... А разницу во времени создания задач до 1 мин делать не хочется

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 00:09 26-09-2010 | Исправлено: Free_Soft, 00:15 26-09-2010
    LomikXP

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Почти, не считая того, что аргументы для следующего этапа заново вычисляются, т.е. в конце
    call:1 %arg1% %arg2%  
    call:1 %arg3% %arg4%
     
    И перед вторым вызовом (call:1 %arg3% %arg4%) вычисленные перед первым вызовом или непосредственно перед ним самим аргументы теряют свои значения, т.к. в первом вызове аргументы переписываются заново (и тип %1 и тип %a%).
     
    Отсюда я заключил, что "двойная" рекурсия невозможна.
    P.S. Я написал программу с помощью циклов, т.к. не смог реализовать "двойную" рекурсию.
     
    Добавлено:
    Вообще, нужно было реализовать заполнение бинарного дерева таким образом:

    Код:
     
                             1
                2                         3
         4            5            6            7
      8    9     10   11    12   13    14   15
     

    Но я не увидел способа реализации на языке bat с помощью "двойной" рекурсии.

    Всего записей: 8 | Зарегистр. 18-07-2008 | Отправлено: 00:23 26-09-2010 | Исправлено: LomikXP, 00:37 26-09-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос решен, мож кому пригодится -

    Код:
    @Echo Off
    Setlocal EnableDelayedExpansion
     
    Set N_Col=40
    Set cntA=100
    Set cnt=0
    for /l %%i in (0,2,98) do (
      dd bs=%$z%c >nul 2>&1
      ping -n 1 127.0.0.1 >nul
      Call :Bar
    )
    pause >nul& exit
     
    :Bar
    If %cnt%==0 (
    For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!
    )
    Set /a Inc=((%cnt%+2)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA%
    If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X= Ы
    Set /a cnt+=2
    Set /a prsnt=cnt*100/cntA
    Title %1 %prsnt%%% Loaded
     

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как можно получить значение текущего времени на минуту раньше?

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 11:04 26-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    минуту что ли отнять, или раньше чем что

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:06 26-09-2010
    Free_Soft



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

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 11:32 26-09-2010
    Nomolos



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброго времени суток!
    Поискал не получилось
    Подскажите пожалуйста, какой вариант проще реализовать, и по возможности помогите:
    1. Есть 2 файлика, один так сказать эталонный второй изменяется в процессе работы.
    Как сравнить 2 этих файла и если разница есть выполнить определенные действий, если нет перейти к следующему заданию.
    2. Есть файлик формата dbf 2 строки 2 столбца, во одной из ячеек цифра. Если она равна нулю тогда выполнить следующее задание, если не равна то выполнить текущее задание и перейти к следующему.
    Вообщем то оба задания осложняются тем что:
    1. Файл может иметь изменения не только в начале файла, а еще и в конце и по середине и т.д. т.е. вообще может изменится, как это отследить
    2. Как вообще можно парсировать dbf файлик не прибегая к стороним утилитам

    Всего записей: 69 | Зарегистр. 21-11-2006 | Отправлено: 11:34 26-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как как возьми да отними, сравни с нулем - если меньше нуля: прибавь 60 и отними 1 от часов, потом сравни часы с 0 ............

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:39 26-09-2010
    NIKZZZZ



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

    Цитата:
    1. Есть 2 файлика, один так сказать эталонный второй изменяется в процессе работы.  


    Код:
    FC file1.txt file2.txt | FIND "различия не найдены" > nul  
    IF ERRORLEVEL 1 Действие
     

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:54 26-09-2010 | Исправлено: NIKZZZZ, 12:00 26-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    если от 03 минут отнять 1, получится 2 без нуля впереди

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 11:59 26-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а ты допиши нолик
     
    Добавлено:
    set minutes=0%minutes%
    set minutes=%minutes~-2%

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:18 26-09-2010 | Исправлено: bomzzz, 12:19 26-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    можешь помочь тупому? как это применить к %time%?

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 12:41 26-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    ну делать надо. и я откуда знаю как тебе надо. с датой или без
    set MYTIME=%TIME%
    set seconds=%MYTIME:~6,2%
    set minutes=%MYTIME:~3,2%
    set hours=%MYTIME:~0,2%
     
    set /a minutes=%minutes%-1
    if %minutes% LSS 0 goto :METKA
     
    :METKA1
    set minutes=0%minutes%
    set minutes=%minutes~-2%
     
    echo %hours%%minutes%%seconds%
    goto :EOF
     
    :METKA
    set /a minutes=%minutes%+60
    set /a hours=%hours%-1
    if %hours% LSS 0 set hours=23
    set hours=0%hours%
    set hours=%hours~-2%
    goto :METKA1
     
    ну и так далее

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:18 26-09-2010 | Исправлено: bomzzz, 13:31 26-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    нужно только время, часы и минуты. Без секунд и даты

    Всего записей: 1515 | Зарегистр. 19-04-2010 | Отправлено: 13:23 26-09-2010 | Исправлено: Free_Soft, 13:27 26-09-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru