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

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



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

    Цитата:
    Т.е. просто файл будет перезаписан своей точной копией тебя устроит?

    Конечно нет, увы
    В этом то и суть - при копировании одинаковые пропускать, недостающие копировать, новые заменять старыми.
     
    Я не нашел такого решения через batники. Плохо искал? Подскажите плиз.

    Всего записей: 14 | Зарегистр. 17-03-2007 | Отправлено: 22:51 06-09-2009 | Исправлено: b2pip, 22:58 06-09-2009
    01MDM



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

    Цитата:
    эм.. профиль у меня сетеой

    Чем богаты.. Я уже упоминал про другую галактику.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 01:22 07-09-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    b2pip
    Цитата:
    Я не нашел такого решения через batники. Плохо искал? Подскажите плиз.

    http://en.wikipedia.org/wiki/Robocopy
    не спасет?
    там еще можно влепить и ключик чтоб потерлись лишние файлы, т.е. утилита как раз для бэкапов/откатов.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 01:57 07-09-2009 | Исправлено: wolf0425, 02:21 07-09-2009
    fd1136

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

    Цитата:
    недостающие копировать

    Это понятно

    Цитата:
    новые заменять старыми

    Тоже понятно - откат.

    Цитата:
    при копировании одинаковые пропускать

    Почему? А если перезаписывать, что произойдет?
    Раз уж
    Цитата:
    новые заменять старыми
    , то и одинаковые можно перезаписать.... Нет?

    Всего записей: 49 | Зарегистр. 09-11-2006 | Отправлено: 11:17 07-09-2009
    wolf0425



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

    Цитата:

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

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:42 07-09-2009 | Исправлено: wolf0425, 11:44 07-09-2009
    fd1136

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

    Цитата:
    копирование будет занимать в разы больше времени и сетевого трафика.  

    Неизвестно. По тому ТЗ, которое озвучено, существуют три типа файлов, из них два, нуждающиеся в замене (новые, отсутствующие). И непонятно распределение по объему между ними - "таких же" может быть существенно меньше, чем "новых" или "отсутствующих".

    Всего записей: 49 | Зарегистр. 09-11-2006 | Отправлено: 12:17 07-09-2009
    tolyn77



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

    Цитата:
    set "test=test.bat"  

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

    Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 15:16 07-09-2009
    b2pip



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

    Цитата:
    копирование будет занимать в разы больше времени и сетевого трафика

    В моем случае именно так..
     

    Цитата:
    Robocopy

    Шикарная мелочь! По дефолту делает то, чего от xcopy никаким параметром не выбьешь.
    И /mir как бонус
    wolf0425, благодарю!

    Всего записей: 14 | Зарегистр. 17-03-2007 | Отправлено: 15:45 07-09-2009
    01MDM



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

    Цитата:
    но я то хотел для автоматизации что бы переменная сама назначалась, мне это нужно для того что бы логи именовались созданные скриптом по его имени

     
    Я так догадываюсь, что батник создает лог действий (тоже вопрос) со своим названием. Тогда такой вариант:

    Код:
     
    1> "%~n0.log" (
        блок кода батника
    )
     

    но лучше будет уточнить задачу.  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:24 07-09-2009 | Исправлено: 01MDM, 17:24 07-09-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не поможете, а то не работает:
    for /f "eol=#" %%A in (G:\scripts\tskklLstlist15.txt) do ((taskkill /F /IM %%A & echo ErrorLevelVar=%ErrorLevel%) | sort)
     
    вот output:
    Ошибка: Не удается найти процесс "UrlLstCk.exe".
    ErrorLevelVar=0
    Ошибка: Не удается найти процесс "realplay.exe".
    ErrorLevelVar=0
    Ошибка: Не удается найти процесс "qttask.exe".
    ErrorLevelVar=0
    Ошибка: Не удается найти процесс "GhostStartTrayApp.exe".
    ErrorLevelVar=0
     
    G:\scripts>
     
    sort не работает

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:25 07-09-2009 | Исправлено: mugil_cephalus, 17:31 07-09-2009
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:37 07-09-2009 | Исправлено: 01MDM, 17:44 07-09-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    до sort'a все работало...
    нужен отсортированный вывод типа:
    Ошибка: Не удается найти процесс "AppleMobileDeviceService.exe".
    Ошибка: Не удается найти процесс "HKML_SRV.exe".
    Ошибка: Не удается найти процесс "msmsgs.exe".
    Ошибка: Не удается найти процесс "msnmsgr.exe".
    Ошибка: Не удается найти процесс "NeroCheck.exe".
    Ошибка: Не удается найти процесс "NMBgMonitor.exe".
    Ошибка: Не удается найти процесс "realplay.exe".
    Ошибка: Не удается найти процесс "REMreader_sl.exe".
    Ошибка: Не удается найти процесс "SeaPort.exe".
    Ошибка: Не удается найти процесс "UrlLstCk.exe".
    Ошибка: Не удается найти процесс "WLIDSVC.EXE".
    Ошибка: Не удается найти процесс "WLIDSVCM.EXE".
    Ошибка: Не удается найти процесс "wltuser.exe".
    Успешно: Процесс "GhostStartService.exe", с идентификатором 1676, был завершен.
    Успешно: Процесс "GhostStartTrayApp.exe", с идентификатором 2248, был завершен.
    Успешно: Процесс "GrooveMonitor.exe", с идентификатором 2128, был завершен.
    Успешно: Процесс "mDNSResponder.exe", с идентификатором 1368, был завершен.
    Успешно: Процесс "QTTask.exe", с идентификатором 1672, был завершен.
    Успешно: Процесс "realsched.exe", с идентификатором 2080, был завершен.
     
    G:\scripts>
     
    и %ErrorLevel% не то показывает... , а нужно:  
     
    Ошибка: Не удается найти процесс "qttask.exe".
    ErrorLevel=128
     
    P.S.
    пытаюсь получить результат:
    Ошибка: Не удается найти процесс "HKML_SRV.exe".ErrorLevelVar=128
    Ошибка: Не удается найти процесс "qttask.exe".ErrorLevelVar=128
    и т.д. в отсортированнном виде на экране консоли cmd

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:48 07-09-2009 | Исправлено: mugil_cephalus, 18:27 07-09-2009
    wolf0425



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

    Цитата:
    пытаюсь получить результат:
    Ошибка: Не удается найти процесс "HKML_SRV.exe".ErrorLevelVar=128
    Ошибка: Не удается найти процесс "qttask.exe".ErrorLevelVar=128
    и т.д. в отсортированнном виде на экране консоли cmd
    Только чего-то типа такого

    Код:
     for /f "eol=#" %%A in (tskklLstlist15.txt) do call :kill %%A
    goto :eof
     
    :kill
    Taskkill /F /Im %1 1>%temp%\kill.log 2>&1  
    set /p=Err %ERRORLEVEL%    <nul
    type %temp%\kill.log
    goto :eof

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 03:42 08-09-2009 | Исправлено: wolf0425, 03:43 08-09-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    то что нужно, спасибо

    Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 10:52 08-09-2009
    mugil_cephalus

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

    Цитата:
    Код: for /f "eol=#" %%A in (tskklLstlist15.txt) do call :kill %%A  
    goto :eof  
     
    :kill  
    Taskkill /F /Im %1 1>%temp%\kill.log 2>&1  
    set /p=Err %ERRORLEVEL%    <nul  
    type %temp%\kill.log  
    goto :eof  

     
    спасибо.
    я ночью тоже о таком варианте - с call'om - думал, а до этого тоже вывод перенаправлял в log, а затем брал ввод оттуда и сортировал...
    а нельзя все это реализовать без лишних файлов ?????
    может что-то вроде:
    sort | (for /f "eol=#" %%A in (G:\scripts\tskklLstlist15.txt) do (set Var1= | taskkill /F /IM %%A & echo %Var1% %ErrorLevel% 2>&1)  
     
    Добавлено:
    wolf0425

    Цитата:
    set /p=Err %ERRORLEVEL%    <nul

    я с set /p не работал, но кажется здесь синтаксическая ошибка
    может (?):
    set /p Err=%ERRORLEVEL% > nul

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 16:51 08-09-2009 | Исправлено: mugil_cephalus, 17:36 08-09-2009
    wolf0425



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

    Цитата:
    кажется здесь синтаксическая ошибка  
    нет там ошибки, это известный финт для печати текста  
    (в данном случае "Err %ERRORLEVEL%    ") без перевода строки.
     
    в результате происходит склейка и печатается такой лог:
    Err 128 ERROR: The process "mfdngldfjkg.exe" not found.
    Err 0   SUCCESS: The process "ping.exe" with PID 1360 has been terminated.
     
    можно наверно строку из временного лога прогнать через eще один for и через это поменять порядок печати %ERRORLEVEL% и текста об ошибке, чтоб было как в твоей хотелке - но imho незачем
     
    что ты хочешь отсортировать своим сортом? чтоб сначала шли все ошибки потом все успешные?  
    пиши файл и сортируй, благо сейчас 1 строка на программу.
    Или впиши | sort & pause в ярлык батника
    Или рекурсивно вызывай батник с перенаправлением всего вывода на сортировщик:
    Код:
    в начало файла
    @echo off  
    if not "%1"=="sort" (call "%~f0" sort |sort & goto :eof)

    скобками и назначением перенаправлений внутри командника - не обойдешься
     

    Цитата:
    может что-то вроде:
    sort | (for /f "eol=#" %%A in (G:\scripts\tskklLstlist15.txt) do (set Var1= | taskkill /F /IM %%A & echo %Var1% %ErrorLevel% 2>&1)  
    Вот как научишься не делать ошибки  по 3 на строку и выучишь как работает | - так можешь пробовать писать и отлаживать такие длинные строки. А пока не стоит

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:42 08-09-2009 | Исправлено: wolf0425, 18:39 08-09-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    работает, но не так, как надо.
    вот вывод:
     
    Err 128    Ошибка: Не удается найти процесс "UrlLstCk.exe".
    Err 128    Ошибка: Не удается найти процесс "realplay.exe".
    Err 128    Ошибка: Не удается найти процесс "qttask.exe".
    Err 128    Ошибка: Не удается найти процесс "GhostStartTrayApp.exe".
     
    G:\scripts>
     
    скрипт сортирует по №-ру ошибки, поэтому я и хочу %ERRORLEVEL% вывести в конец каждой строки, чтоб было как:
     
    Ошибка: Не удается найти процесс "AppleMobileDeviceService.exe".  
    Ошибка: Не удается найти процесс "HKML_SRV.exe".  
    Ошибка: Не удается найти процесс "msmsgs.exe".  
    Ошибка: Не удается найти процесс "msnmsgr.exe".  
    Ошибка: Не удается найти процесс "NeroCheck.exe".  
    Ошибка: Не удается найти процесс "NMBgMonitor.exe".  
    Ошибка: Не удается найти процесс "realplay.exe".  
    Ошибка: Не удается найти процесс "REMreader_sl.exe".  
    Ошибка: Не удается найти процесс "SeaPort.exe".  
    Ошибка: Не удается найти процесс "UrlLstCk.exe".  
    Ошибка: Не удается найти процесс "WLIDSVC.EXE".  
    Ошибка: Не удается найти процесс "WLIDSVCM.EXE".  
    Ошибка: Не удается найти процесс "wltuser.exe".  
    Успешно: Процесс "GhostStartService.exe", с идентификатором 1676, был завершен.  
    Успешно: Процесс "GhostStartTrayApp.exe", с идентификатором 2248, был завершен.  
    Успешно: Процесс "GrooveMonitor.exe", с идентификатором 2128, был завершен.  
    Успешно: Процесс "mDNSResponder.exe", с идентификатором 1368, был завершен.  
    Успешно: Процесс "QTTask.exe", с идентификатором 1672, был завершен.  
    Успешно: Процесс "realsched.exe", с идентификатором 2080, был завершен.
     
    И ПЛЮС! в конце каждой строки  %ERRORLEVEL%
     
    тоесть сначала сортировка ошибка/успешно, а далее сортировка image'ov процессов по алфавиту
     
    НО всеравно спасибо

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:00 08-09-2009
    wolf0425



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

    Цитата:
    хочу %ERRORLEVEL% вывести в конец каждой строки, чтоб было как:
    Вот в этом примере "как" - строк хватило бы и поменьше, а сами строки должны текстом соответствовать "хочу"
    (а не припиской после них)  

    Цитата:
    тоесть сначала сортировка ошибка/успешно, а далее сортировка image'ov процессов по алфавиту  
    ну сейчас имеем перечень успешно терминированных процессов в начале лога и по алфавиту - у них ошибка у всех 0.
    А те что не удалось загасить - секциями по типам ошибок (они в основном 128) и каждая секция опять сортирована по имени процесса.
    По-моему так лог куда читабельнее твоей хотелки
     
    но если тебе точно хочется переставить код в хвост и ошибки сортировать только по имени процесса, то это делается так:
    Код:
    :kill
    Taskkill /F /Im %1 1>%temp%\kill.log 2>&1  
    for /f "delims=" %%l in (%temp%\kill.log) do if %ERRORLEVEL% equ 0 (echo %%l) else (echo %%l code=%ERRORLEVEL%)
    goto :eof
    сообщение о нулевом коде для успешно прибитых процессов я убрал из соображений красоты
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:37 08-09-2009 | Исправлено: wolf0425, 01:07 09-09-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    я конечно щас не по теме напишу, но если кто знает что-нить про freeproxy то ответте плз на мой вопрос, просто мне кажется тот кусок форума мертв(
    http://forum.ru-board.com/topic.cgi?forum=5&topic=14737&start=20

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 19:55 08-09-2009
    Qwait

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

    Всего записей: 11 | Зарегистр. 16-02-2006 | Отправлено: 08:46 09-09-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