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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Спасибо. А, все-таки, почему W7 не поняла, что копируемый файл надо брать из текущего каталога?

    Всего записей: 2238 | Зарегистр. 16-10-2002 | Отправлено: 18:09 07-10-2010
    smirnvlad

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

    Цитата:
    А, все-таки, почему W7 не поняла, что копируемый файл надо брать из текущего каталога?

     
    при запуске от другого пользователя меняется рабочая папка, проверить можно перенаправив вывод команды cd в файл, а в той папке нет указанных файлов
     

    Код:
     
    @echo off
    cd > c:\2906123.txt
     


    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 19:46 07-10-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди добрые! Подарите плиз кусок кода, решающий следующую задачу. Проверяется один конкретный файл, если время его последнего изменения была более часа назад, то ...
    Дальше я уже сам.

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 09:04 08-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    Похожие задачи уже решались. Посмотри тут.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    я шапку процедил перед задаванием вопроса. Скрипты отпадают. А время последнего изменения файла я так и не понял как узнать.
    Ага! Вот нашёл тему "Переименовывание файлов по дате модификации". Щас попробую приспособить.

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 09:43 08-10-2010 | Исправлено: Maximus777, 09:45 08-10-2010
    king_stiven

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

    Цитата:
    Скрипты отпадают.

    Религия не позволяет? Просто интересно узнать почему. Ведь там скрипт автоматически создаётся батником.

    Цитата:
     Проверяется один конкретный файл, если время его последнего изменения была более часа назад, то

    Вот там есть пример с VBS только по созданию а не по изменению. Сам в VBS не шарю, но думаю можно немного изменить, кто разбирается. и по изменению так же удобно будет.
     
    Добавлено:

    Цитата:
    А время последнего изменения файла я так и не понял как узнать.

    for %%i in ("файл") do echo %%~ti

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    С датами много проще работать через vbs - бат не понимает дат вообще.

    Цитата:
    А время последнего изменения файла я так и не понял как узнать.  

    например если имя файла передается в батник как параметр, то так:
    echo %~t1
     
    Добавлено:
    Смотри for /?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:03 08-10-2010
    Maximus777

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

    Цитата:
    Религия не позволяет?

    Точно! Церковь святого Билли запрещает использование скриптов
     
    Нашёл в справке выдачу даты и времени создания. А как воспользоваться только временем? Или вообще возможно ли получить дату не в человечьем формате, а в машинном (когда и дата и время в одном флаконе)? Чтобы без лишних движений вычислить последний час.

    Код:
    Set f_DateTime=%~t1
    echo %f_DateTime%

    Выдаёт 02.09.2010 18:10

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 10:12 08-10-2010
    king_stiven

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

    Цитата:
    Церковь святого Билли запрещает использование скриптов

    Visual Basic Scripting Edition (обычно просто VBScript) — скриптовый язык программирования, интерпретируемый компонентом Windows Script Host. Он широко используется при создании скриптов в операционных системах семейства Microsoft Windows.
     
    VBScript был создан компанией Microsoft

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 10:24 08-10-2010
    res2001



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

    Цитата:
    А как воспользоваться только временем?

    Смотри set /? - там есть конструкции, чтоб вырезать подстроку.
    Только временем не получится, вдруг у тебя дата файла будет 00:30 к примеру - а это уже другой день.
    Обрати внимание на лидирующие нули - от них надо избавлятся, иначи в арифметических операциях смд будет принимать число за восьмеричное.

    Цитата:
    Или вообще возможно ли получить дату не в человечьем формате, а в машинном (когда и дата и время в одном флаконе)?

    Я же писал - батники не понимают дат в принципе, для бат это просто набор символов, не более.

    Цитата:
    Чтобы без лишних движений вычислить последний час.  

    Чтоб без лишних движений юзай VBS. А в бат будет много лишних движений.

    Цитата:
    Церковь святого Билли запрещает использование скриптов

    По моему этот святой очень даже за vbs разве что ты сидишь на Вин9х до сих пор.
     
    Добавлено:
    Тебе потому сразу никто и не ответил толком, что реализовать твою задачу на бат можно - но геморно.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:28 08-10-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Set f_DateTime=%~t1
    echo %f_DateTime:~-5%
     
    смотри set/?

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 10:31 08-10-2010
    Maximus777

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

    Код:
    @echo off
    ::Дата и время последней модификации файла
    Set f_DateTime=%~t1
    ::Дата последней модификации файла
    Set f_Date=%f_DateTime:~0,10%
    ::Часы из времени последней модификации файла
    Set f_h=%f_DateTime:~11,2%
    ::Минуты из времени последней модификации файла
    Set f_m=%f_DateTime:~14,2%
    ::Текущая дата
    Set t_Date=%DATE%
    ::Часы из текущего времени
    Set t_h=%TIME:~0,2%
    ::Минуты из текущего времени
    Set t_m=%TIME:~3,2%
    ::Разница в минутах
    Set a=%t_m%-%f_m%
    if %t_Date%==%f_Date% (
      if %f_h%==%t_h% (
        if %a% GTR 30 goto :EOF
    )
    )
    echo Bingo!

    Правда сократил время до 30 минут, мне этого достаточно. Если есть замечания, буду рад модернизировать.

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 11:39 08-10-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777

    Цитата:
    Правда сократил время до 30 минут


    Код:
    Set /a a=%t_h%%t_m%-%f_h%%f_m%

    Позволяет взять разницу в час (2, 3 и т.д.)

    Код:
    if %a% GTR 100 (200, 300 и т.д.)

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 11:55 08-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    нда ... говорю же геморно.
    У тебя не учитывается еще несколько ситуаций:
    1. время файла и текущее в одной дате, но разные часы и разница меньше 30 мин.
    2. время файла и текущее в разных датах, такое тоже возможно.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:56 08-10-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    спасибо, про "/а" я забыл.

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 11:57 08-10-2010
    Rush

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

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 11:57 08-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А с ведущими нулями в числах у тебя проблем нет? Впрочем это зависит от региональных настроек виндов.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:58 08-10-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    усё там норм. Если дата отличается, то уже работаем. А также если дата совпадает, но отличается час, тоже работаем.
     
    Добавлено:

    Цитата:
    А с ведущими нулями в числах у тебя проблем нет? Впрочем это зависит от региональных настроек виндов.

    Проблем не должно быть, ибо на одной и той же винде сравниваются два времени. Уж в пределах то одной винды они будут в одном формате?
     
    Добавлено:
    Блин! Вроде вот только разбирался как обнулить файл, не могу найти инфу. Склероз, тудыть его в качель! Подскажите, а!
    echo %1 пихает в файл строку "Режим вывода команд на экран (ECHO) отключен."

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 11:58 08-10-2010 | Исправлено: Maximus777, 12:05 08-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    Да про ведущие нули, в таком варианте проблем не будет. Вылезет если арифметические операции использовать.

    Цитата:
    усё там норм. Если дата отличается, то уже работаем. А также если дата совпадает, но отличается час, тоже работаем.  

    Так бы сразу и говорил

    Цитата:
    cho %1 пихает в файл строку "Режим вывода команд на экран (ECHO) отключен."

    echo.%1 поможет

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:12 08-10-2010
    Maximus777

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

    Цитата:
    echo.%1 поможет

    echo.>%1 сабака оставляет перевод строки.
     
    nul>%1 обнуляет файл, но шкнит про отказ в доступе.

    Всего записей: 673 | Зарегистр. 27-07-2007 | Отправлено: 12:15 08-10-2010 | Исправлено: Maximus777, 12:28 08-10-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