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

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



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

    Всего записей: 251 | Зарегистр. 10-05-2009 | Отправлено: 21:30 19-07-2009
    king_stiven

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

    Код:
    @echo off
    cd /d С:\DAS
    for /f "tokens=*" %%c in ('dir /t:c /b /a:d /o:-d') do (
        if not defined fgh for %%d in ("%%c\@55*") do copy "%%d" С:\LLL\1.txt
        if defined fgh (
            for %%e in ("%%c\@55*") do copy "%%e" С:\LLL\2.txt
            goto :eof
        )
        set fgh=1
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 08:05 20-07-2009
    sergxz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    была проблема о которой писал выше, подсказали решение, но оказалось что не всегда оно срабатывает. Суть проблемы, необходимо подключаться к удаленным компьютерам, забирать оттуда файлы.
    Код:
    net use k: \\10.28.28.120\share /user:oi password  //Подключаемся к удаленной машине
    xcopy k:\files.rar d:\Temp /D /e /c /z /y                 //Копируем нужные файлы на локальный компьютер
    net use k: /delete                                     Отключаем диск К чтобы дальше использовать эту букву для подключения следующего компьютера
    И по новой  
    net use k: \\10.28.28.121\share /user:oi password
    xcopy k:\files1.rar d:\Temp /D /e /c /z /y
    net use k: /delete  
    И так 52 компьютера....  
    Но каждый раз, перед отключением диска батник задает вопрос:
    "Остались открытые файлы или каталоги, продолжить отключение? Y / N" Жмем Y, диск отключается, батник продолжает работу. Поднимал здесь этот вопрос, и мне подсказали использовать такой код:
    echo y|net use k: /delete      
    Я обрадовался, думал все заработало..но при использовании часто возникает ошибки.Иногда, а скорее часто он не отключает диск К, а вместо этого пишет  
    "Не был получен допустимый отклик".
    Как то систематизировать ошибку не смог, когда она появляется, при каких случаях..вроде бы нет системы...Посему и не понятно что за ошибка.
    Есть мысли?

    Всего записей: 11 | Зарегистр. 16-09-2005 | Отправлено: 13:44 20-07-2009
    01MDM



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

    Код:
     
    net use k: /delete /yes
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:41 20-07-2009
    ProbaRK

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sergxz
     
    Может так подойдет:
    (привожу пример обновления ключа DrWEB 4.44)
     

    Код:
     
        @echo off
        cls
        echo.
        echo. ключ drweb32.key должен лежать вместе с пакетником
        echo.
        echo.
        echo.
        echo.
        echo.
     
        net view | for /F "tokens=1 delims=\\ " %%c in ('@find "\\"') do @(
        xcopy drweb32.key "\\%%c\c$\Program Files\DrWeb" /r /y
        )
        echo.
        echo.
        pause
     

     
    xcopy "понимает" Universal Naming Convention (UNC) пути.

    Всего записей: 82 | Зарегистр. 08-02-2005 | Отправлено: 21:26 20-07-2009 | Исправлено: ProbaRK, 21:34 20-07-2009
    2life

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

    Цитата:
    NvvLazyTiger

     Спасибо за помощъ в решении вопроса, многое уже использую, но есть еще кое что:
    - Касаемо 1с вопросов нет, процедура стандартная совершенно.
    - Думаю от танцев с получением времени можно отказатся, т.к. есть rar с командой -ag.
    - Хочется знать, как проверить отключение диска с помощъю (%ErrorLevel%)? Или лучше сделать это с помощью проверки папки? Как видно диск подключается к последней папке с файлами архивов, хотя можно наверное создать пустой каталог, и по нему проверять... Но формат команды, мне неизвестен, не той не другой(%ErrorLevel%).
     
    Вот, что имеется на текущий момент

    Цитата:
    @echo off  
    REM 1c_upload_started  
    "C:\Program Files\1Cv77\BIN\1cv7s.exe" config /D"F:\Base1C\PRBasic\" /Nбекапюзер /Pпароль /@f:\backup\zik-current\zik.prm  
    cls  
    REM upload_transfer_to_backup_srv_started  
    net use Z: \\192.168.1.200\bk\ZiKCurr /user:user1 passw0rd  
    "C:\Program Files\WinRAR\rar.exe"  a -y -dh -ep -pПароль -agYYYYMMDD_HH_MI_SS "Z:\zik"  "D:\BACKUP\zik"  
    cls
    REM file_counter_start
    set nCount=0  
    for %%a in (Z:\zik*.Rar) do call :ChkDel %%a  
    goto :EndChkDel  
     
    :ChkDel Kill 61-th file  
    set /a nCount+=1  
    if %nCount% LEQ 60 goto :eof  
    erase %1  
    goto :eof  
     
    :EndChkDel  
    cls
    Echo Y | net use Z: /delete  


    Всего записей: 86 | Зарегистр. 04-08-2006 | Отправлено: 23:23 20-07-2009 | Исправлено: 2life, 23:34 20-07-2009
    ForposT_ForeveR



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте.
    Подскажите пожалуйста, как скопировать из папки, где находится бат файл в папку c:\test
    Файлы
    1.txt,2.txt ..10000.txt
    1-lala.txt,2-lala.txt .. 10000-lala.txt

    Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 00:13 21-07-2009
    king_stiven

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

    Код:
    @echo off
    for /l %%e in (1,1,10000) do (
        copy %%e.txt c:\test
        copy %%e-lala.txt c:\test
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 01:48 21-07-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2life
    Цитата:
    - Хочется знать, как проверить отключение диска с помощъю (%ErrorLevel%)? Или лучше сделать это с помощью проверки папки? Как видно диск подключается к последней папке с файлами архивов, хотя можно наверное создать пустой каталог, и по нему проверять... Но формат команды, мне неизвестен, не той не другой(%ErrorLevel%)

    0. Я педант, поэтому обычно пишу много... ;)
     
    1. Как "лучше сделать это", - зависит от множества разных обстоятельств. Начиная со среды исполнения + условий использования того или иного технического решения, и, заканчивая квалификацией разработчика/эксплуатационного персонала. А ещё есть вкусовые предпочтения, т.к. одно и тоже обычно можно сделать по-разному...
     
    Например: *.CMD, пускаемый однократно (автором, "на коленке"), и аналогичный (делающий тоже самое), но работающий на сервере в автоматическом необслуживаемом режиме, - это "две большие разницы".
     
    Так что ниже идут некоторые практические соображения, касаемо именно серверных решений, работающих годами в разных местах под w2k & w2k3.
     
    2. Общие соображения (касаемо *.CMD):
     
    А) Т.к. "разбор полётов" (при авариях) обычно выполняется в цейтноте и post factum, то совершенно обязательно максимально подробное протоколирование (занесение в лог) всего, что доступно в процессе. Бо далеко не всегда возможно повторение "на бис".
     
    В большинстве случаев достаточно перенаправлять в лог выдачу команд (StdOut & StdErr), например:
    Код:
    net use %myRemoteShare% /delete >> %MyLog% 2>>&1

    Б) Многократно используемый контекст удобно задавать в переменных среды (например %myRemoteShare%). В результате полностью исключается ситуация "кто в лес, кто по дрова" при изменении/использовании этого контекста.
     
    В) Желательно (по возможности;) проверять наличие необходимых условий (ДО запуска команды) и получение нужного результата (ПОСЛЕ). Например, для команды Erase:
    "до" - существование того, что нужно удалить;
    "после" – отсутствие оного.
     
    Г) Критические (т.е. те, что могут завершиться аварийно или "бесследно умереть", утащив за собой весь *.CMD) команды у меня обычно оформляются так [пример]:
    Код:
    Set RetErrTxt=net use %myRemoteShare% /delete
    Echo ? %RetErrTxt% >> %MyLog%
    %RetErrTxt% >> %MyLog% 2>>&1 || goto ErrsRecoverSub
    Т.е.
    - в логе фиксируется строка запуска критической команды (ДО того КАК);
    - туда же идёт выдача этой команды;
    - п/п обработки аварийных завершений (ErrsRecoverSub) получает через %RetErrTxt% строку запуска, закончившуюся ненулевым ErrorLevel. Для организации оповещения и прочих действий в связи.
     
    Д) Запуск самих *.CMD также протоколируется (отдельно) + отслеживается их код возврата [см. Б) т.е. единый подход для всех уровней вызова].
     
    Е) ErrorLevel – это не формат и не команда, а глобальный атрибут, т.н. "код возврата" [команды]. Условие "нулевой код возврата [завершения]" [команды] – это признак [её] успешности. В большинстве случаев, но не всегда... Например, у исключительно удобной и функциональной утилиты RoboCopy.Exe коды 0..7 – успешные (зависят от обстоятельств), а коды 8..15 – нет. Зато интерпретатор cScript.Exe возвращает нулевой код и при аварии в скрипте (если там явно не установлен иной код завершения).
     
    BTW У меня такие "неоднозначные" команды "упакованы" в отдельные утилиты (*.CMD) с унифицированным интерфейсом. Там же организованы и всё потребные "пляски с бубном" вокруг параметров вызова, проверок условий и анализа результатов.
     
    С другой стороны, коды возврата – это удобное средство для организации расширенного взаимодействия между вызванным (child) и вызвавшим (parent) процессами. Например, см. справки по командам/операторам: exit /?, set /?, if /?, etc.
     
    Ё) Отдельный, очень важный момент – должна быть обустроена надлежащая система оперативного оповещения ("тех, кого следует";) с фиксацией [аварий]. Флаги, почта, net send и т.п...
     
    3. Частные соображения (касаемо NET [USE]):
     
    А) Достаточно "неоднозначная", даже коварная команда. Требует очень внимательного кодирования "вокруг" при использовании. Поведение сильно зависит от среды и условий исполнения. Реакция может быть весьма неприятна, например, при вызове в *.CMD без консольного доступа, выход на консольное приглашение:
    Код:
    Введите пароль для ...
    – т.е. процесс повисает до прямого снятия административными средствами.
     
    Б) Я не вижу смысла использовать планирование на буквы устройств (например, на Z:), если это не требуется для какой-то особой ситуации. Бо большинство известных мне команд (и даже серьёзных приложений) прекрасно работает (если доступ уже обеспечен) по полным путям типа \\Server\Share\Dir\File. А буквы, - это ограниченный ресурс... ;)
     
    В) Я также не вижу смысла в явном удалении сетевых подключений, если оные никому не мешают (одной критической командой меньше). Тогда (при надобности) просто выясняем видимость нужного, а уж затем (если НЕ видно) – подключаемся. Т.е. подход - "разумнее избегать сложностей, чем бороться с оными".
     
    Г) Проверки... "Их есть у меня!" ;)
    1. подключение к ресурсу
      Код:
      Set MyShare=\\Server\Share
      net use|find /i "%MyShare%" && goto MyShareOk
      действия при отсутствии подключения
      goto GoOn
      : MyShareOk
      действия при наличии подключения
      Т.е. запрос имеющихся подключений и поиск нужного
    2. наличие файла
      Код:
      Set MyShare=\\Server\Share
      Set MyFile=MyDir\SomeFile
      If exist %MyShare%\%MyFile% goto MyFileOk
      действия при отсутствии файла
      goto GoOn
      : MyFileOk
      действия при наличии файла
      Т.е. проверяется именно видимость (но НЕ доступность!) конкретного файла
    3. наличие подкаталога
      Код:
      Set MyShare=\\Server\Share
      Set MyDir=SomeDir\
      If exist %MyShare%\%MyDir% goto MyDirOk
      действия, если подкаталог не обнаружен
      goto GoOn
      : MyDirOk
      действия, если подкаталог в наличии
      Причём:
      NB.
      • Бессмысленно проверять видимость шары (условием exist). Т.е. нужна видимость чего-то именно внутри оной.
      • Если не указывать конечный обратный слеш (‘\’), возможно ошибочное срабатывание при отсутствии подкаталога SomeDir , но наличии одноимённого файла.
      • Вместо явной проверки существования (‘exist’) можно использовать команду ‘dir’ с анализом кода возврата (или выдачи оной команды - отдельные ‘песни’;). К слову, эта команда может применяться и к шарам.
    4. успешность команды net use, неявно – любым способом из вышеперечисленного, или явно – по коду возврата или анализу выдачи (анализ не совсем тривиален, но в некоторых случаях востребован).
    Мне описанного хватает. Явных предпочтений нет.
     
    Вот, где-то так. (Я сказал, что зануда?;)))

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 09:16 21-07-2009
    HaK1R



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

    Цитата:
    Я педант, поэтому обычно пишу много...  

    о, написал-то! а скока писал по времени?

    Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 09:54 21-07-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HaK1R
    Цитата:
    о, написал-то! а скока писал по времени?

    Примерно 10 часов с перерывами (на неотложные действия). В среднем - примерно час на каждые 6-10 строк серьёзного текста. Уже много лет... ;)
     
    Поэтому, писать - терпеть не переношу! ;)))

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 10:13 21-07-2009
    Ohripshiy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Своего Мозга не хватает... может поможете вы...
    Ситуация: есть отшареный раздел "g:", у всех он виден как сетевой диск "обменник"
    Очистка осуществляется вручную путем очистки папки с названием "мусор" и закидванием туда всего, что находится в корне..., папка мусор находится в этом же разделе...
    Нужен батник, который делал бы это за меня... (в планировщик его вотну с периодом в 2 недели...
    За ранее спасибо...

    Всего записей: 3 | Зарегистр. 12-09-2005 | Отправлено: 11:08 21-07-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ohripshiy если можно удалить старую мусорницу (а не чистить) то так:

    Код:
    @echo off
    rd /s /q g:\мусор
    md g:\мусор
    for /f "delims=" %%a in ('dir /b /s g:\') do if not "%%a"=="g:\мусор" move "%%a" g:\мусор


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:42 21-07-2009 | Исправлено: wolf0425, 12:52 21-07-2009
    2life

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот это работа NvvLazyTiger! Я еще переваривать буду несколько дней, что написано. По поводу пункта  

    Цитата:
    Б) Я не вижу смысла использовать планирование на буквы устройств (например, на Z, если это не требуется для какой-то особой ситуации. Бо большинство известных мне команд (и даже серьёзных приложений) прекрасно работает (если доступ уже обеспечен) по полным путям типа \\Server\Share\Dir\File. А буквы, - это ограниченный ресурс...  

     
    Именно нужно использовать как подключаемый диск, потому что это сервер архивации, не включенный в AD, соответственно это более простой вариант.

    Всего записей: 86 | Зарегистр. 04-08-2006 | Отправлено: 13:22 21-07-2009 | Исправлено: 2life, 13:22 21-07-2009
    Eklectic

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, подскажите  
    Есть ли возможность получить список системных общих папок или список логических дисков другого компа в сети??
     
    Задача стоит: найти все файлы в сети с определённым расширением (именно во всей сети, не только в расшареных файлах)
     
    Моё решение (на данный момент):  
    с помощью Net View получаю список компов в сети, получаю список локальных дисков (здесь собсно затык), паролем от администратора домена монтирую сетевой диск из всем системных шар поочерёдно (по-идее у каждого локального диска есть системная шара, если конечно специально не отключена) и ищу на этом диске файлы.  
     
    Если есть мысли, советы или я где-то ошибся - с удовольствием выслушаю

    Всего записей: 4 | Зарегистр. 05-10-2007 | Отправлено: 13:22 21-07-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2life
    Цитата:
    Именно нужно использовать как подключаемый диск, потому что это сервер архивации, не включенный в AD, соответственно это более простой вариант

    ... Возможно (т.е. - "дело вкуса", на мой взгляд;), но...
     
    У меня есть несколько автоматически обслуживаемых удалённых ресурсов, доступных только по прямому IP (т.е. включённых в общую ЛВС по каким-то своим, "особым" правилам и законам). С буквами,.. - была бы отдельная, дополнительная морока (в этих букв управлении), включая нейтрализацию последствий аварий.
     
    А так (т.е. без букв) - всё работает "на ура". Т.е. AD здесь ни при чём... IMHO ;)

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 14:31 21-07-2009
    1KACH

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите написать батничик  
    1Проходит очистка папки C:\WINDOWS\Temp\
    2проходит сверка системной даты и если она более чем  допустим 01.09.2009 происходит очистка всех файлов в папках C:\xxxx\xxxxx\ а также на  на E: все файлы только с расширением txt

    Всего записей: 55 | Зарегистр. 02-10-2005 | Отправлено: 14:54 21-07-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1KACH
    Всё в шапочке есть.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:58 21-07-2009
    sergxz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    [
    Цитата:
    net use k: /delete /yes  

    Так получилось! Ура!

    Всего записей: 11 | Зарегистр. 16-09-2005 | Отправлено: 17:44 21-07-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Внёс изменение в Работа с текстом, датой, и файлами в шапке

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:32 22-07-2009 | Исправлено: king_stiven, 12:30 04-12-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