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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    ZolotnikOV



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

    Цитата:
    что-то вроде.. синтаксис неточно помню, но идея - проверка на существование, если нет - сразу в сон, если да - уничтожение и в сон на 1 минуту.

     что то не работает. напишите что добавить что б как то вЫводило результат. лог какой то писало что ли.
    не спорю, идея хорошая.но наверно не для мого случая. так как за минуту прога уже может использовать dll-ку.
     
    wolf0425
     а проверка точно так же затратно по ресурсам как и удаление? или может все таки заменить на проверку даставив туда ping -n 2 -w 1000 localhost > nul ?
     
     
    Добавлено:

    Цитата:
    а тупо запретить программе запись в папку?

     не, она должна записывать файлы, но не все. вернее все кроме некоторых.
    может можно запретить как то по маске записываать?

    Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 17:37 20-08-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    повторю вопрос... мне кажется просто мой пост уже не читается...
     
    в общем суть такова, что надо проверить значение переменной... т.е. число ли это. нужно именно целое число длинна не имеет значения.  
    числа нужны такие:  
    1, 5, 40, 100, 764 вообщем по кол-ву знаков ограничения нет( для простоты можно гораничится 4, больше врядли будет задействовано ), 0 спереди волнует или нет не знаю точно - лучше убрать т.к. были случаи что воспринималось как 16х  
     
    и 2 проблемка нужно проверить переменную на принадлжность к времени... т.е. удовлетворяет ли она маске HH:MM:SS. если не сложно то с датой аналогично...  
    дата формата DD.MM.YYYY - проверку существования числа думаю сам накорябую, хотя условия в bat меня напрятают немного...(((

    Всего записей: 6573 | Зарегистр. 28-08-2008 | Отправлено: 17:53 20-08-2009
    gale

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно вырезать из строки кусочек. Если так
     
    set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
    set cut=%string:~2,5%
     
    то работает. Если по другому
     
    set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
    set begin=2
    set end=5
    set cut=%string:~%begin%,%end%%
     
    то нет.

    Всего записей: 129 | Зарегистр. 09-03-2006 | Отправлено: 18:20 20-08-2009 | Исправлено: gale, 18:21 20-08-2009
    bredonosec



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

    Цитата:
    может можно запретить как то по маске записываать?

    да =)  
    почти =)
    создать в блокноте текстовой файл нулевого размера, обозвать его этим именем длл-ки, и выставить ему в атрибутах ридонли =)  
    Всё, файл в папке есть, второй с тем же именем нельзя, перезаписать этот нельзя - вуяля? )

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16272 | Зарегистр. 13-02-2003 | Отправлено: 19:17 20-08-2009
    ZolotnikOV



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

    Цитата:
     вуяля? )

    оно то так да несовсем((( нужно именно по маске:
    abcd.xxx    
    *.dll  

    где .xxx расширение конкретного файла, который не должен лежать в папке.прога его ложит, обрабатывает и переименовывает.  
    а *- имена файлов неизвестны, и могут менятся.
    вот такая картина маслом))  
     
    очень наадеюсь на помощь и жду от Вас предложений
     
     

    Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 21:48 20-08-2009
    HaK1R



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

    Цитата:
    число ли это
    если нет то ошибку выдать?

    Цитата:
    и 2 проблемка нужно проверить переменную на принадлжность к времени... т.е. удовлетворяет ли она маске HH:MM:SS. если не сложно то с датой аналогично...  

     
    тоже ошибку выдать?
     
    Добавлено:
    gale

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set string=aaaaaaaaaaaaaaaaaaaaaaaaaaa
    set begin=2
    set end=5
    set cut=!string:~%begin%,%end%!
    echo cut
     
     
    Добавлено:
    ZolotnikOV
    я не понял ничего, может это из затого что щас 20 минут второго
    утром почитаю)

    Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 01:15 21-08-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HaK1R
     
    ну зачем глупые вопросы задавать? не все ли равно что ты там будешь делать ошибку или экран красить, да хоть закрывать прогу... главное ветку условтй разобрать а, что вместо "Оператор 1", "Оператор 2" поставить я придумаю...
    важен сам алгоритм отсева шлачного ввода!!!

    Всего записей: 6573 | Зарегистр. 28-08-2008 | Отправлено: 02:38 21-08-2009
    wolf0425



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

    Цитата:
    а если программа уже начнет использовать dll-ку.
    тогда ее невозможно будет удалить? правильно?
    может подскажите какой то другой выход?
    если программа работает и обратилась к dll - то ты эту dll удалить не можешь.
    Хотя можешь переименовать, в том числе с переносом в соседний каталог диска.
     
     
    Добавлено:

    Цитата:
     а проверка точно так же затратно по ресурсам как и удаление?  
    по процессору - более затратна чем удаление.
    Ну и проверку существования все равно сделает del abcd.xxx   перед тем как писать на диск, с проверкой разница только ругнется del или нет, смысла проверять предварительно - мало.
    Ты лучше над временем задержки подумай - сейчас она односекундная, оно действительно нужно настолько часто?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:05 21-08-2009 | Исправлено: wolf0425, 11:17 21-08-2009
    ZolotnikOV



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

    Цитата:
    Хотя можешь переименовать, в том числе с переносом в соседний каталог диска.
    переименование и перенос не вариант. если прога уже обратиться к dll, то крышка)) тогда уже можно и всю папку с прогой удалять)))))
     

    Цитата:
     сейчас она односекундная.

    ну вот)) а как угадать какую задержку поставить?
    одна секунда много или мало?
     
    все таки хотелось бы услышать, можно ли реализовать как то запрет проге на запись по маске. так как удаление?

    Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 11:25 21-08-2009
    wolf0425



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

    Цитата:
    одна секунда много или мало?  
    вот цикл прошел, все файлы удалили. Через какое время имеет лично для тебя важность проверять и удалять там заново?
    Или ты какой-то антивирус или инсталлятор пытаешься так придавить, который туда что-то распаковывает?
    Посмотри с правами какого юзера он запускается и пишет файлы - может можно по правам запретить.
    Успеть проверить и удалить в короткий промежуток времени между тем как временный файл заканчивают писать, переименовывают в dll и запускают - батником малореально, это нужен драйвер на уровне ядра, отслеживающий всю работу с файлами.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:28 21-08-2009 | Исправлено: wolf0425, 11:39 21-08-2009
    ZolotnikOV



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

    Цитата:
    вот цикл прошел, все файлы удалили. Через какое время имеет лично для тебя важность проверять и удалять там заново?

    если бы я знал)). вобще удаление с циклом помагает. а с одной секундой не пробовал. думаю что методом перебора приду к оптимальному решению.  
     
    пока оставляем вот такое:
    код

    Цитата:
     
     :starting    
    ping -n 2 -w 1000 localhost > nul
    del /q abcd.xxx  
    del /q *.dll  
    goto starting
     
     
     
     
    500 -  это  соответственно пол секунды?

    Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 12:11 21-08-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd
    ну вот с датой, если выскочит 31.02.2008 , то есть надо учитывать тонкости месяцев, високосных лет?
     
    Добавлено:
    а алгоритм примерно такой
    for /f "tokens=1,2,3 delims=." %%a in ("%data%") do (
        if "%%a" LEQ "00" set not_data=1
        if "%%a" GTR "31" set not_data=1
             ...
        if not defined not_data echo %data%
    )

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:35 21-08-2009 | Исправлено: king_stiven, 15:11 21-08-2009
    Unitaz



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    %0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?

    Всего записей: 2300 | Зарегистр. 28-06-2002 | Отправлено: 16:25 21-08-2009
    guru431

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть маленькая задача - переименовать компы в AD.
     
    Есть список с именами компов вида:
    имя_компа=новое_имя_компа
     
    Есть батник на переименование:
    set ComputerName=
    set NewComputerName=
    set DomainUserUPN=user
    set DomainUserPasswd=password
    netdom renamecomputer %ComputerName% /newname:%NewComputerName% /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
     
    Как сделать цикл, который переименует все компы из списка (ну и желательно напишет лог)?

    Всего записей: 67 | Зарегистр. 28-02-2007 | Отправлено: 16:46 21-08-2009
    Kirillhome



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

    Цитата:
    %0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?

    %CD%
    (точнее говоря - это текущий каталог)
    или
    %~dp0%

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 17:17 21-08-2009 | Исправлено: Kirillhome, 17:28 21-08-2009
    pazdak

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста,  
    нужно в bat файле запускать команду каждую последнюю субботу месяца?
    Можно ли такое сделать не прибегая к vbs и другим скриптовым языкам.
     
    Спасибо.

    Всего записей: 378 | Зарегистр. 13-02-2003 | Отправлено: 17:30 21-08-2009
    Kirillhome



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

    Цитата:
    Подскажите пожалуйста,  
    нужно в bat файле запускать команду каждую последнюю субботу месяца?
    Можно ли такое сделать не прибегая к vbs и другим скриптовым языкам.  

    Можно!
    Вот, к примеру, так (для русской локали)

    Код:
     
    @echo off
    setlocal
    For /f "tokens=1-7 delims=.:/-, " %%i in ('echo exit^|command /K prompt $D $T ') do (
        For /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
            set dow=%%i
            set dd=%%j
            set mm=%%k
            set yyyy=%%l
            set hh=%%m
            set min=%%n
            set ss=%%o
        )
    )
     
    set max_day=24
    if "%mm%"=="01" set max_day=25
    if "%mm%"=="02" (
       set max_day=22
       if "%yyyy%"=="2012" set max_day=23
       if "%yyyy%"=="2016" set max_day=23)
    if "%mm%"=="03" set max_day=25
    if "%mm%"=="05" set max_day=25
    if "%mm%"=="07" set max_day=25
    if "%mm%"=="08" set max_day=25
    if "%mm%"=="10" set max_day=25
    if "%mm%"=="12" set max_day=25
     
     
     
    if "%dow%"=="Сб" (
       if "%dd%" GEQ "%max_day%" (
         echo This is last Sunday on this month))
     
    rem Воскресенье  Вс
    rem Понедельник  Пн
    rem Вторник      Вт
    rem Среда        Ср
    rem Четверг      Чт
    rem Пятница      Пт
    rem Суббота      Сб
     
    endlocal
     

    Для английской, очевидно, надо будет Сб поменять на Sun (нет английской версии под рукой, что бы проверить...)

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 18:38 21-08-2009 | Исправлено: Kirillhome, 18:40 21-08-2009
    king_stiven

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

    Цитата:
    Переменная %0  


    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 18:49 21-08-2009
    stalker5551

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

    Всего записей: 1 | Зарегистр. 21-08-2009 | Отправлено: 21:03 21-08-2009 | Исправлено: vu1tur, 17:21 24-08-2009
    Unitaz



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

    Цитата:
    Unitaz  
     
    Цитата:%0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?  
     
     
    %CD%  
    (точнее говоря - это текущий каталог)  
    или  
    %~dp0%

     
     
    спасибо я шапку читал ........  %CD%  и  %~dp0% возвращают полный путь а мне нужно только имя каталога без пути , если бы было что то типа %-1 я был бы удовлетворён  
     
    вопрос можно сформулировать по другому как мне от %~dp0% или %CD% отрезать не нужный мне путь
     
     
    например файл d:\DWL-2100AP\Drivers\NAME\3.jpg находится в каталоге с именем NAME вот его мне и надо заполучить

    Всего записей: 2300 | Зарегистр. 28-06-2002 | Отправлено: 10:16 22-08-2009 | Исправлено: Unitaz, 11:09 22-08-2009
       

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru