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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    81sanek81

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну понимаете в чём дело, получается что это изменение в реестре нужно внести на все локальные компьютеры в сети, чтобы сработал мой Bat-файл. Однако первоначальной целью у меня и стоит именно изменение параметров реестра (правда других), и для этого я и использую bat совместно с reg, так как не умею писать wsh/vbs сценарии, и не знаю как мне при загрузке всем пользователям внести изменения в реестр - замкнутый круг получается!

    Всего записей: 22 | Зарегистр. 14-02-2008 | Отправлено: 20:29 04-03-2008 | Исправлено: 81sanek81, 20:37 04-03-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81
    Почему нельзя раскидать БАТник и REG-файл по сети, а потом уже с помощью GP его локально запускать?

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 09:12 05-03-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81
    psexec попробуй(PSTools в шапке). У меня на всех компах стоит nnCron и при появлении D:\SHARE\net_nn.cmd выполняет его от имени залогинившегося юзера и потом удаляет net_nn.cmd. Так что я обычно просто пишу батник net_nn.cmd и раскидываю по сети

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 09:26 05-03-2008 | Исправлено: igor_andreev, 09:33 05-03-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ЧИТАТЬ ВСЕМ ГУРУ И ГОСУ
     
    Nagual
    то что ты предложил конечно хорошо, но я просил помочь не с тем. то я и сам могу создать.  
    У меня потребность есть в проверке задержки кашдого из узлов по направлению к адресату.  
    Например к майл ру у меня стоит 10 узлов, первый это мой гвард, второй это шлюз провайдера, третий это например хост мирового выхода, дальше мирового входа той страны где пункт назначения нашей проверки и т.д. аж до того хоста на катором обрабатываются запросы.  
    Вот мне необходимо получать задержку по каждому из них. по каждому из этих хостов.  
     
    Обычно для мониторинга пользуются програмой WinMTR.exe
    но она отображает слишком много не нужной информации и не имеет возможности вывести это в нужном мне варианте.  
     
    А вот в СМД есть две команды ПИНГ и ТРЕЙС через трейс можно узнать весь путь, а через пинг - задержку к каждому из хостов по пути.
     
    Вот мне нужно это организовать батничком, что бы выводился список такой как я указал раньше, в табличку, по строкам (секунды) по столбикам (задержки в милисенукдах)
     
    Я бы это сам написал, но нехватает знаний с всякими переменными и строковыми манипуляциями.  
    Помогайте кто чем может.

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 10:35 05-03-2008
    Max441

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

    Цитата:
    Max441  
    насколько я понял тебе нужно что-то вроде
    Код:@echo off  
    chcp 1251>nul  
    :next  
    set /p "c=Введите имя компьютера: "  
    set /p "l=Введите имя профиля: "  
    set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"  
    if exist %q%bookmark_old.nsf (del/q %q%Cache.NDK&move/y %q%bookmark.nsf bookmark_old.nsf)  
    goto:next

    отлично!!! то что нужно!
     
     
     
     
    Добавлено:
    Nagual
    отлично!!! то что нужно!
     

    Цитата:
    Max441  
    насколько я понял тебе нужно что-то вроде
    Код:@echo off  
    chcp 1251>nul  
    :next  
    set /p "c=Введите имя компьютера: "  
    set /p "l=Введите имя профиля: "  
    set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"  
    if exist %q%bookmark_old.nsf (del/q %q%Cache.NDK&move/y %q%bookmark.nsf bookmark_old.nsf)  
    goto:next

     
     
     
     

    Всего записей: 4 | Зарегистр. 27-02-2008 | Отправлено: 10:55 05-03-2008
    igor_andreev

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

    Цитата:
    А вот в СМД есть две команды ПИНГ и ТРЕЙС через трейс можно узнать весь путь, а через пинг - задержку к каждому из хостов по пути.  


    Код:

    pathping /?  

    Не подойдет? Или еще кроме tracert есть tracerPt(в XP Home нет, только в Prof)

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 11:46 05-03-2008 | Исправлено: igor_andreev, 11:51 05-03-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Takuja
    А чем тебя не устраивает стандартная tracert.exe? Она как раз все это и выводит, кроме времени.
    Можешь его добавить

    Код:
     
    @echo off
    echo start tracert %time:~0,-3%
    echo -------
    for /f "skip=2 tokens=*" %%i in ('tracert ya.ru ^| findstr [0-9]') do echo %%i
    echo -------
    echo finish tracert %time:~0,-3%
     

     
    У tracert еще дополнительные ключи есть, посмотри их

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:56 05-03-2008 | Исправлено: 01MDM, 12:07 05-03-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Парни, рассказываю. Сама программа tracert.exe меня устраивает, но она выводит одиночный запрос и отображает разовый запрос. А у меня такая проблема, что провайдер Экономит на трафике и делает это ночью. Потому мне нужно мониторить круглосуточно канал инета.  
    Можно было бы использовать просто tracert.exe и каждые 10 секунд дописывать в файл полученные данные, но вы подумайте как там будет удобно отследить время и потери? ВООБЩЕ помоему не реально. Да и вес такого журнала будет ППЦ какой.  
    Потому я и прошу помощи хотя бы  помочь с tracert.exe
    что бы просто не в столбик выводить хосты а в калонки.  
    что бы было примерно так  
     
    ВРЕМЯ    ХОСТ1    ХОСТ2    ХОСТ3    ХОСТ4    ХОСТ5    ХОСТ6
    10:12:00     3            2            *            *            *             *  
    10:12:10     5            4            4            4            1            1  
    10:12:20    5             12          13          15          51          300
     
    вот в такой таблице можно сразу увидеть по звёздочкам, в какое время и на каком сегменте сети не было интернета.  а то Провайдер реально уже запарил.
     
    Вот помогите мне поиграться с выводом tracert.exe.

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 12:10 05-03-2008
    angeltwo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81
     
    А почему не использовать для изменений в реестре команду reg? Она позволяет сразу на удаленных компах изменять реестр (доступны ветки HKLM и HKU). Правда, неудобно все значения реестра руками прописывать в параметры команды (если их много). Хотя, если у тебя используется только команда regedit /s file.reg, то батник должен отработать, несмотря на то, что отругается на UNC путь (regedit как раз и лежит в директории WINDOWS). Только вместо file.reg пиши полный путь (\\comp\folder\file.reg)

    Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 16:05 05-03-2008
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Takuja, а ты не боишься что список ХОСТ1    ХОСТ2    ХОСТ3    ХОСТ4    ХОСТ5    ХОСТ6 - будет меняться в течение суток? За месяц он заведомо имеет шанс смениться...
    Или это не узлы по пути до хоста, а сам список проверяемых на доступность хостов? Но тогда как убедишь провайдера в том, что виноват конкретно он, а не кто-то другой?
     
    на предмет разбора вывода tracert и списков - кури for /?
     
    как организовать запуск цикла c tracert каждые 1..10 минут - объяснять не надо?
    проверять канал каждые 10 секунд - явный перебор...
     
     
     
    Добавлено:
    81sanek81
     
    батник вида

    Код:
    start /wait regedit -s "%~dp0Save1.reg"

    будучи запущен из \\server\share - конечно ругнется про неподдержку UNC, но вот лежащий на сервере рядом с батником регфайл Save1.reg будет успешно найден и импортирован...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:45 05-03-2008 | Исправлено: wolf0425, 17:13 05-03-2008
    81sanek81

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за советы, но в данном случае самый простой выход - это вместо bat файла использовать скриптовый файл vbs (как мне посоветовали) - всего лишь одна команда:
     

    Код:
     
    Set WshShell = CreateObject("WScript.Shell")  
    WshShell.Run "regedit /s \\server\netlogon\regfile.reg"
     

    Всего записей: 22 | Зарегистр. 14-02-2008 | Отправлено: 18:10 05-03-2008
    angeltwo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81
    так тебе и так батник в одну строчку посоветовали - даже короче, чем VBS))
     
    А у меня вопрос следующего плана: в этом топике есть альтернатива команде echo, которая удаляет символы перехода на новую строку, но оставляет пробелы как разделители между словами. Поскольку я не силен в 16-чном представлении помогите плиз переделать его так, чтобы наоборот, не было пробелов после слов, а сразу шел символ перехода на новую строку. Заранее огромное спасибо всем откликнувшимся.

    Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 18:26 05-03-2008
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81 что характерно - батник и vbs делают совершенно одно и то же (запускают регедит с полным именем файла), только в vbs шара проиписана явно...
     
    angeltwo, обрезать хвостовые пробелы в строках хочешь?
    например так sed.exe -i -r "s/ +$//g" file.txt
    наверно можно и проще, но так - точно устойчиво к произвольным символам в строке, да и утилита у меня всё равно есть (вместе с прочими unixutils)

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:15 05-03-2008 | Исправлено: wolf0425, 19:18 05-03-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Ну каждые 10 секунд это конечно перебор, хотяб 1 раз в минуту.  
     
    про КУРИТЬ фор /? прости я не нарик не курю.  
    а в описании про таблицы для tracert - ничего нет.  
    Про список хостов по пути к конечному, было обдумано, на момент начала запросов, создается этот самый список, по каторому и происходит трасировка, и этот список смениться  ну МАКСИМУМ после репуска самого трасера, это продумано мелкими еще при разработке.  
    Ктому же я попросил не флуда а помочь преобразовать выводные данные из списка, в таблицу.  
    Интересно кто нить поможет?

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 19:28 05-03-2008
    01MDM



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

    Цитата:
    есть альтернатива команде echo

    ??
    Если не нужен перевод строки то можно использовать

    Код:
     
    @echo off
    set /p=Some string<nul>file.txt
     


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

     
    А еcho оставляет пробел?  
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:31 05-03-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Takuja
    время в милисекундах хочешь получать из какой команды?
    я так понял, ты сначала хочешь отрассировать сервер, а потом командой ping определить задержку до него?
    делаешь для excel?
    почему время без даты?
    первая строка в файле отчёта неуместна при генерации кода, если ты хочешь постоянно дописывать отчёт, имхо, просто легче написать первую строку, а остальной отчёт генерировать кодом и дописывать в отчёт

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 19:45 05-03-2008
    angeltwo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Перевод строки как раз нужен. Поясню суть задачи: есть батник, который берет список компов из тхт-файла, пингует их и на выходе получает 2 тхт-файла - один со списком ответивших компов (включенных), другой - со списком промолчавших компов (назовем их выключенными). Вывод списка производится командой echo. В получившихся файлах список выглядит следующем образом "namecomp пробел символ перехода на следующую строку"
    В результате, если напрямую использовать файл для подстановки в psexec, то ничего работать не будет, надо предварительно удалить пробелы после nemecomp. wolf0425? посоветовал sed - спасибо ему, все нормально стало. Но если есть возможность штатными средствами Windows это сделать, то подскажите как, плиз.

     
    Добавлено:
    Прошу прощения за беспокойство, это я не тем местом думаю))) Для удобочитаемости я перед символом перенаправления вывода в файл и после него ставил пробелы - вот они и добавились в файл.))) Все в порядке!) Зато узнал о мощном текстовом процессоре sed )

    Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 20:03 05-03-2008 | Исправлено: angeltwo, 20:30 05-03-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    angeltwo
    Для примера, чтобы обработать переменную %namecomp%

    Код:
     
    @echo off
    set "namecomp=compName "
    echo с пробелом в конце "%namecomp%"
     
    if "%namecomp:~-1,1%"==" " set namecomp=%namecomp:~0,-1%
     
    echo без пробела "%namecomp%"
     

     
    Не понял сразу, что надо

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:01 05-03-2008
    DrSqaer



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

    Код:
     
    set fso=Wscript.CreateObject("Scripting.FileSystemObject")
    dir="c:\tmp\"
    set f = fso.GetFolder(dir)
    Set fc = f.Files
    For Each f1 in fc
    d= f1.DateCreated
    diff=DateDiff("d",d,Now)
    if diff>14 Then
    WScript.Echo "DELETE! " & f1.name
    fso.DeleteFile(dir & "\" & f1.name)
    end if
    Next

    добавить проход по папкам рекурсивно?
    И где можно почитать про VBS scripting?
     
    СпасибО!

    Всего записей: 170 | Зарегистр. 16-01-2006 | Отправлено: 21:33 05-03-2008 | Исправлено: DrSqaer, 21:34 05-03-2008
    RaP1D



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу прощения за глупый вопрос, но как сделать сложение двух переменных?
     

    Цитата:
    set var1=100
    set var2=1
    set var3=var1+var2

     
    Не работает!
     
    Уже не надо:
    Забыл символ /a после set

    Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 22:03 05-03-2008 | Исправлено: RaP1D, 22:11 05-03-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 100 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru