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

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



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Batnik
    нет так не получится, батники умеют десятичные файлы считать но не умеют время и дату складывать и отнимать
     
    Добавлено:
    а вот перевести все в число дней от определенной даты обычно 1 января 1980 года - идея здравая
     
    Добавлено:
    подожди кого нибудь я чета никогда не пользовался вычислительными выражениями в батниках даже как умножить и поделить точно будет не знаю
     
    Добавлено:
    ааааааааааааа еще надо высокосные годы учитывать
     
    Добавлено:
    ну ета не так то уж и сложно поделить на 4 количесвто лет и целую часть прибавить к дням
     
    Добавлено:
    в досе как то можно дату получить от 1 января 1980 года сразу

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:48 29-09-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Batnik
    Используй forfiles.exе, в семерке, и может быть и в висте, из коробки.

    Код:
     
    forfiles /p "c:\path\to\folder" /d -90 /m *.* /c "cmd /c if @isdir==FALSE del /a /f @file"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:03 29-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а если из семерки выкалупать этот форфайлс он на хп будет работать? а если сетвер использовать?
     
    Добавлено:
    ну я как обычно сделал - в большой сетке на 100 человек 1-2 расшаривают диск С. в п2п нашел этот FORFILES он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:23 29-09-2010
    wolf0425



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

    Цитата:
    он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32

    так ты запросто мог 64-битную версию найти
    а вообще взятый с win2003 forfiles под XP - работал

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 19:56 29-09-2010 | Исправлено: wolf0425, 19:57 29-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:59 29-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у меня в 32-битной семерке - 43008  
    а в утилитах, неизвестного происхождения v1.1 - 12к

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 22:06 29-09-2010 | Исправлено: wolf0425, 01:31 30-09-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В 7 x64  
    в system32 -  50712
    в syswow64 - 43008

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:38 29-09-2010
    Mark_Titov



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

    Код:
    @ECHO OFF
    Set N_Col=54
    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

    Нужно что бы например в процессе продвижения полосы код проверял наличие 10 txt файлов,
    но не все пачкой, а по отдельности, получается что на каждые 10 делений полосы прогресс-бара одна проверка на наличие файла.
    И каждая проверка с условием, типа если файл в наличии, то идем дальше, если нет файла процесс
    прерывается и goto :error.
    Помогите пож-ста, вещь очень полезная, думаю что многим пригодится кроме меня...
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 23:36 29-09-2010 | Исправлено: Mark_Titov, 23:38 29-09-2010
    res2001



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

    Код:
    @ECHO OFF
    Set N_Col=5
    Set cntA=10
    Set cnt=0
    for %%i in (test.txt test2.txt test3.txt ......) do (
    if not exist %%i goto:eof
    ping -n 2 127.0.0.1 >nul
    Call :Bar
    )
    pause >nul& exit
     
    :Bar
    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/2
    Title %1 %prsnt%%% Loaded
    exit /b

    В первом цикле в скобках укажи нужные файлы.
    Чтоб Bar правильно считал проценты и выводил нужное количество полосок нужно правильно инициализировать переменные N_Col, cntA в начале скрипта. Сейчас я подобрал их значение для 10 итераций, если будет файлов больше, надо подбирать другие значения.
    Что каждая переменная значит было лень разбираться.
     
     
    Добавлено:
    Но больше всего тут интересно то, как ему удается выводить инфу каждый раз в одну строку.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:58 30-09-2010 | Исправлено: res2001, 09:11 30-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    или cls каждый раз делать или  
    <nul set /p strTemp=Весь этот текст  
    <nul set /p strTemp=будет находиться  
    <nul set /p strTemp=на одной строке.

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



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

    Код:
    @ECHO OFF
    Set cntA=10
    for /l %%i in (1,1,%cntA%) do (
    ping -n 1 127.0.0.1 >nul
    Call :Bar %%i
    )
    pause >nul & exit
     
    :Bar
    <nul Set /p X= °
    Set /a prsnt=%1*100/cntA
    Title %prsnt%%% Loaded
    exit /b

     
    В cntA - количество итераций.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:43 30-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:03 30-09-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001, спасибо тебе, а можно еще вариант в место (test.txt test2.txt test3.txt ......) вставить goto :1, goto :2, goto :3, и т.д до goto :10.
    Что бы по ходу выполнения прогресс бара выполнялись разные по значению действия, например goto :1 - проверка наличия файла, goto :2 - пинг, goto :3 - отправка почты блатом и т.д до goto :10. И что бы так же сохранялась градация прогресс-бара..?
    Только мне нужен прогресс бар для вот этих размеров - mode con lines=50 cols=110

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 10:21 30-09-2010 | Исправлено: Mark_Titov, 10:25 30-09-2010
    Koolyan



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    а  шде можно такое  взять??

    Всего записей: 248 | Зарегистр. 04-08-2006 | Отправлено: 10:31 30-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    тута http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=740#12

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:33 30-09-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    0>nul set /p="GO ["
    for /l %%i in (0,1,9) do call:%%i && 0>nul set /p="#"
    echo ] DONE
    goto:eof
     
    :0
    1>nul ping -n 2 localhost
    goto:eof  
     
    :1
    1>nul ping -n 2 localhost
    goto:eof  
     
    :2
    1>nul ping -n 4 localhost
    goto:eof  
     
    :3
    1>nul ping -n 2 localhost
    goto:eof  
     
    :4
    1>nul ping -n 1 localhost
    goto:eof  
     
    :5
    1>nul ping -n 3 localhost
    goto:eof  
     
    :6
    1>nul ping -n 3 localhost
    goto:eof  
     
    :7
    1>nul ping -n 1 localhost
    goto:eof  
     
    :8
    1>nul ping -n 2 localhost
    goto:eof  
     
    :9
    1>nul ping -n 1 localhost
     

    Понятно, что вместо пингов, какая-то определенная задача. Главное чтоб она ничего не выводила в консоль.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:43 30-09-2010
    king_stiven

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

    Цитата:
    Нужно сравнить текущую дату с датой файла из папки и если они различаются на 3 месяца удалить файл.

    В шапке, правда там через vbs файл, который опять же автоматически создаётся и удаляется самим батником.

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 10:44 30-09-2010
    Koolyan



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    спасибо , а не подскажите  такой  вопросик , есть куча вордовских  документов, есть ли батник  поиска по словам не открывая  их, просто каждый док примерно по  4-7mb

    Всего записей: 248 | Зарегистр. 04-08-2006 | Отправлено: 10:45 30-09-2010
    res2001



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

    Цитата:
    goto :1, goto :2, goto :3, и т.д до goto :10.  


    Код:
    ...
    for %%i in (call:1 call:2 call:3) do (
    %%i
    ...
    )

     
    В подпрограммах не забывай в конце делать exit /b, а так же блокируй весь вывод на экран иначе прогресс-бар разъедется.
     
    Добавлено:
    Koolyan

    Цитата:
    спасибо , а не подскажите  такой  вопросик , есть куча вордовских  документов, есть ли батник  поиска по словам не открывая  их, просто каждый док примерно по  4-7mb

    Батника нет, но ворд сам умеет искать файлы по содержимому. В диалоге открытия файлов "Сервис->Найти". У меня ворд 2003, что там в новомодных не в курсе, но думаю тоже имеется этот функционал.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:50 30-09-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:04 30-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