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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    Smitis



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

    Цитата:
    Необходимо копировать все файлы *.sys со всех дисков (со всеми атрибутами-системный, архивный,скрытый, только для чтения и.т.д.) в папку , которая должна создаваться в том месте ,откуда батник запущен.  

    Простейший вариант:

    Код:
     
    md 111 2> nul
    for /f %%f in ('dir /b/s/a c:\*.sys') do copy /y "%%~f" 111\ > nul
     

    Но будут скопированы и папки с расширением sys. Если такие встречаются, пример надо усложнять.

    ----------
    Разум когда-нибудь победит

    Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 17:08 31-08-2008 | Исправлено: Smitis, 23:53 31-08-2008
    ssnvit

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

    Цитата:
    [/q]
    [q]Код:  
    rd /s /q c:\test  

     
    что-то у меня не катит
    пишу команду forfiles /p c:\test /m *.txt /d -30 /c "cmd /c rd /s c:\test" и видим следующее - файлы устаревшие она удалила, папка пуста, а вот сообщение "процесс не может получить доступ к файлу, так как этот файл занят другим процессом".
    Таким образом папка не удаляется, хотя файлы четко удаляет.
    Может есть какая-то тонкость а применении forfiles.
    Вот допустим папки с именами типа 20080823 она корректно удаляет и файлы и папки, но там я команду писал немного другую forfiles /p c:\20080823 /s /m *.txt /d -30 /c "cmd /c del /q @path"

    Всего записей: 156 | Зарегистр. 05-12-2002 | Отправлено: 21:09 31-08-2008
    01MDM



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

    Цитата:
    "процесс не может получить доступ к файлу, так как этот файл занят другим процессом".  

     
    Наверное forfiles когда сканирует, перемещается в данную папку. Поэтому ее и не получается удалить
     
    Лучше будет так, к тому же случайно не удалишь нужные файлы. Т.е удалится только пустая папка.

    Код:
     
    forfiles /p c:\test /m *.txt /d -30 /c "cmd /c del @FILE" && rd c:\test
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:37 31-08-2008
    king_stiven

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

    Код:
    for %%e in (q w e r t y u i o p l k j h g f d s a z x c v b n m) do (
        for /f "tokens=*" %%f in ('dir /b/s/a-d %%e:\*.sys') do xcopy "%%f" 111 /i /r /h /y > nul
    )

    где 111 создаваемая папка

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:22 31-08-2008
    NovaC

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

    Цитата:
    Ошибка в последней строке: "goto :1" , надо   "goto :eof".  

    "goto :1" это я уже потом правил, а с "goto :eof" выдаёт :

    Код:
    F:\Backup\dir>t.cmd F:\backup\dir\ 2  1>t.txt
    Отсутствующий оператор.
     - - - - - - - - -  
    Отсутствующий оператор.
    Непредвиденное появление: 998712.

    а с последним вариантом (который с комментариями):

    Код:
    F:\Backup\dir>t.cmd F:\backup\dir\ 2  1>t.txt
    Неверное число. Числа ограничены 32 битами точности.
     - - - - - - - - -  
    Неверное число. Числа ограничены 32 битами точности.
    Непредвиденное появление: goto.

    не понятно т.к. отличие только в комментариях и пробелах в конце строк (сравнивал через DiffMerge)
    NIKZZZZ, СПАСИБО за вставку комментов, если не сложно хотелось бы уточнить :

    Цитата:
    Удаление незначащих нулей

     - Что это такое (физически что представляют)? и зачем их удалять если они не значащие ?

    Цитата:
    Сложение с удвоенной разрядностью, , отдельно складываются левые и правые 8 знаков

     - Что такое "удвоенная разрядность", для чего она и почему нельзя складывать по обычному ?

    Цитата:
    ::Десятичное число не может начинаться с нуля, поэтому слева приписывается 1 , потом результат корректируется.  
    set /a sl=1%s:~0,-8%+1%size:~0,-8%+1%sr:~0,-8%-300000000

    Понятно что "-300000000" потому что дописали три единицы, но почему именно "-300000000" ?
    Может я туплю, но хотелось бы полностью разобраться в этом скрипте.
     
    NIKZZZZ, ещё раз БОЛЬШОЕ спасибо !

    Всего записей: 95 | Зарегистр. 09-01-2008 | Отправлено: 05:03 01-09-2008 | Исправлено: NovaC, 05:13 01-09-2008
    ladgalec

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Огромное спасибо !
    Вник,понял .
     
    Добавлено:
    И ещё вопрос :
     
    Пишу в окне CMD : taskkill
    А окно пишет : Класс не зарегистрирован.
    Что это ? 0_о

    Всего записей: 6 | Зарегистр. 29-08-2008 | Отправлено: 05:41 01-09-2008
    sunic

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

    Извените а не подскажете хорошую (читать толковую литературу) по батникам И лучше чтоб на великом и могучем. В шапке да есть толковые но они в большенстве своем на буржуйском  

    Всего записей: 27 | Зарегистр. 27-11-2006 | Отправлено: 07:48 01-09-2008 | Исправлено: sunic, 07:52 01-09-2008
    azamapendrus



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    md LOG 2> nul  
    for %%e in (q w e r t y u i o p l k j h g f d s a z x c v b n m) do (  
    for /f "tokens=*" %%f in ('dir /b /s /a-d %%e:\*.sys') do xcopy "%%f" LOG /i /r /h /y > nul  
    )  
     
    Отлично работает! Спасибо.

    Всего записей: 19 | Зарегистр. 24-08-2008 | Отправлено: 12:40 01-09-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ladgalec
    Код:
    @echo off
    chcp 1251>nul
    title
    Проверяем наличие утилиты taskkill.exe в %path%
    echo
    Проверяем наличие утилиты taskkill.exe в %path%
    if not exist %windir%
    \system32\taskkill.exe echo taskkill.exe надо где-то нарыть и положить в одну из этих папок %path% &goto:_p
    echo А taskkill.exe там и не было... о_О
    :_p
    pause

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:21 01-09-2008
    azamapendrus



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sunic
    Прога для удобного написания батников новичкам(на русском-могучем и великом):
    http://www.m-w-c-s.com/distrib/dr_batcher_1_3_setup.exe
    и пилюля к ней:
    http://www.rufull.ru/crack/2008/8.August/rufull.ru.keygen.Dr.Batcher.1.3.zip
     
    Добавлено:
    Возможно ли спомощью батника заменить или удалить строку в *.doc-файлах ?
    В текстовых то можно, а  в *.doc-файлах  не получается.

    Всего записей: 19 | Зарегистр. 24-08-2008 | Отправлено: 19:09 01-09-2008 | Исправлено: azamapendrus, 20:10 01-09-2008
    Elroir



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

    Цитата:
    Возможно ли спомощью батника заменить или удалить строку в *.doc-файлах ?

    Нет.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:15 01-09-2008
    NIKZZZZ



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

    Цитата:
    т.к. отличие только в пробелах в конце строк

    Возможно , они вызывают проблемы. Пробелы необходимо убрать.

    Цитата:
    Удаление незначащих нулей

    Вместо 0000000000000123 выводится 123

    Цитата:
    Что такое "удвоенная разрядность", для чего она и почему нельзя складывать по обычному ?

    Ограничение в bat файлах - число не может превышать 2^31 - 1 (2 Gb - максимальный размер)

    Цитата:
    Понятно что "-300000000" потому что дописали три единицы, но почему именно "-300000000" ?  

    Складываются числа, вида 00000123, при добавлении слева единицы получаем 100000123.
     
     
     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:35 01-09-2008
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 23:52 01-09-2008
    tydinn

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Немного не в тему но информация думаю будет интересна многим. Тут раньше проскакивал вопрос как скрыто запустить bat-файл. В поисковике наткнулся на утилиту "sstart" - http://www.sed.lg.ua/serg_gm/rus/sstart_readme.htm. Попробовал работает. Задачей было запустить батник так чтобы он не маячил на рабочем столе и не захламлял панель задач.  Запускал батник ч-з ярлык с параметрами -hide (указываются впереди пути к bat-файлу, пр. sstart -hide C:\test.bat) Если кому интересно попробуйте потестить, автор пишет о багах, но у меня все прекрасно работает. Может добавится в список " полезные утилиты" ?

    Всего записей: 2 | Зарегистр. 01-09-2008 | Отправлено: 00:01 02-09-2008 | Исправлено: tydinn, 12:24 02-09-2008
    NIKZZZZ



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

    Цитата:
    А не проще для складывания утилитку CLCC.exe использовать?

    Проще. А еще проще взять готовую утилиту из шапки, позволяющую вычислить размер каталога. Еще проще, написать все это на Delphi, и , запускать скомпилированный ехешник из батника !!!
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 00:24 02-09-2008
    ladgalec

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
     
    Эта программка лежит на месте =) ,я сразу проверил.
     
    И пути в переменных прописаны, а "класс не зарегистрирован" ! =(

    Всего записей: 6 | Зарегистр. 29-08-2008 | Отправлено: 04:15 02-09-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Спокойней, конечно если религия не позволяет или домашку сделать надо, то конечно надо помучицца. А на дельфи писать надо тоже уметь. Складывать с помощью батника на самом деле весьма неудобно, ведь уже многие выкладывали свои примерчики. Как говорил Игорь Андреев `некрасиво получается`.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:49 02-09-2008
    NovaC

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

    Цитата:
    king_stiven  
    Цитата:А не проще для складывания утилитку CLCC.exe использовать?  
    Проще. А еще проще взять готовую утилиту из шапки, позволяющую вычислить размер каталога. Еще проще, написать все это на Delphi, и , запускать скомпилированный ехешник из батника !!!

    Я считаю что для таких вещей удобнее использовать vbs а в данном случае хочу обойтись cmd. А писать на Delphi это как из пушки по воробьям. Да и exe-шник по умолчанию ~ 300 кб и больше (Delphi7) если конечно не использовать методы из статей типа "битва за размер… "
    ИМХО
     
    Добавлено:
    подскажите, пожалуйста, как в cmd выполнять проверку на "> больше" - "< меньше" для чисел ?

    Всего записей: 95 | Зарегистр. 09-01-2008 | Отправлено: 10:16 02-09-2008 | Исправлено: NovaC, 13:31 02-09-2008
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:43 02-09-2008
    Collapse Troll

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте! Мне нужно выполнить две команды:
    Цитата:
    for %i in (\\192.168.102.184\DLL\pj*.dll) do regsvr32 %i
    for %i in (\\192.168.102.184\DLL\pj*.ocx) do regsvr32 %i

    Как мне выполнить его в бат или cmd файле? Если набирать Start-> Run-> cmd, затем писать эти строки - все работает на ура. А в *.cmd файле - постоянно получаю ошибку
    Цитата:
    i was unexpected at this time.
    Пробовал брать строки в кавычки, добавлять в начале "cmd", "run", "start".. Может быть в файле нужно по-другому оформлять цикл for?

    Всего записей: 791 | Зарегистр. 05-08-2006 | Отправлено: 17:31 03-09-2008
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru