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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LunQ а что пишет в таком случае
    if exist j:\nul if exist j:\MYFOLDER set MYDISK=j:  
    тоже ошибку?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 14:21 07-06-2010
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
      Ребята, пожалуйста, подскажите в чем ошибка данной комманды:
     
    Start /Wait "Install Files\Install.exe"
     
       Файл Install.exe попросту не запускается. Батч-файл, содержащий данную комманду, лежит рядом с папкой Install Files. Буду рад любому конструктивному предложению!

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 16:25 07-06-2010 | Исправлено: Artem_Butenko, 16:27 07-06-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Start "" /Wait "Install Files\Install.exe"
     
    Добавлено:
    wolf0425
    Так не сработает - можешь опробовать на a: - проблема собственно в том что точка монтирования есть, а тома нет...
     
    LunQ
    а вот вариант с
    fsutil.exe fsinfo volumeinfo j:\&&(if exist "j:\MYFOLDER" set "MYDISK=j:")
    должен пройти...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 16:41 07-06-2010 | Исправлено: yurkesha, 17:25 07-06-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли (с помощью sed) из файла получить другой путем замены n-ой (для определенности - четвертой) строки другой, полученной из нее (из заменяемой) путем замены 6 символов, начиная с Z позиции (для определенности 20-ой), на заданные символы (для примера asdfgh)

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 17:48 07-06-2010
    LunQ



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

    Цитата:
    if exist j:\nul if exist j:\MYFOLDER set MYDISK=j:  
    тоже ошибку?

    Та же ошибка.
     

    Цитата:
    а вот вариант с
    fsutil.exe fsinfo volumeinfo j:\&&(if exist "j:\MYFOLDER" set "MYDISK=j:")
    должен пройти...

    А вот с этим заработало, СПАСИБО!!!

    Всего записей: 30 | Зарегистр. 12-10-2008 | Отправлено: 18:23 07-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BagaBaga если я правильно разобрал твои условия (заменить 6 символов в 4й строке, начиная с 20й позиции на явно указанные) то так:
     
    sed -r  "4 {s/^(.{19}).{6}/\1asdfgh/}" <file1 >file2
     
    если нужная строка короче 25 символов - то замены не произойдет.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:48 07-06-2010 | Исправлено: wolf0425, 19:51 07-06-2010
    barsikline



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

    Цитата:
     
    Пиши батник в кодировке WINDOWS 1251 ANSI и вначале батника ставь  
    chcp 1251
    двойными кавычками все пути экранируй.
    А вообще надо %errorlevel% каждой папки загонять в переменнуюи сравнивать их  

    С кодировкой пробывал та же хрень...
       
     

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

    Да нужна самая свежая папка.  т.е по сути нужно сделать так, чтобы сравнивались даты файлов и выбирались самые свежие ))), а потом качались все файлы с этой датой.

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 06:44 08-06-2010
    wolf0425



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

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 07:11 08-06-2010
    barsikline



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

    Цитата:
    ты фонт то у окна переключи на люсиду, а то кракозябры читать любителей мало

    там просто прописан путь к файлам... к примеру, "Инструкциия и документация"/"Техническая документация"/"МТ1 РТО и ОФЗ"

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 08:40 08-06-2010 | Исправлено: barsikline, 08:44 08-06-2010
    wolf0425



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

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

    Код:
    @echo off
    chcp 1251
    (echo user anonymous anonymous
     echo cd "/Инструкциия и документация/Техническая документация/МТ1 РТО и ОФЗ/"
     echo ls -t
     echo pwd
    ) | ftp -n localhost  
     
    понятно что батник сохранен в 1251
     
    судя по принтскрину у тебя не срабатывает cd в  первом вызове ftp
    ты бы проверил, что туда зайти можно хотя бы вручную

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 08:48 08-06-2010 | Исправлено: wolf0425, 10:16 08-06-2010
    dvymp4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, почему не работает конструкция:
    FOR /F "tokens=*" %%I in ('DIR "%variable_1%" | FIND "%variable_2%"') DO ECHO %%I
     
    Пишет:
    Непредвиденное появление: |.
     
    Извиняюсь если вопрос уже обсуждался, читать всю тему просто нет сил. BAT файлы пишу нечасто, а тут вот потребовалось.
     
    Помогите пожалуйста.

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 10:24 08-06-2010
    yurkesha



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

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 10:26 08-06-2010
    dvymp4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо ОГРОМНОЕ!!!

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 10:36 08-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня уважаемые гуру...
    Помогите пож-ста.
     
    Пытаюсь сделать небольшую систему, которая бы грубо говоря пингами проверяла бы наличие связи. Состоит она вся из батников.
    В кратце - пингует, если пинги не прошли пишет логи и отсылает на мыло - это я сделал, отладил - все работает.
    Вторая часть этой системы - статистический модуль который тоже пингует объект, создает папки, в них пишет ежедневные логи и на основе ежедневных
    логов выводит в отдельном файле txt ежемесячный лог с подсчетом средне-арифметического процента потери связи за месяц.
    Потом пишет этот ежемесячный отчет в htm файл и отправляет на мыло...
    Так вот со второй частью у меня проблемы возникли.
    Не правильно ведет подсчет ежемесячных потерь и пишет ошибку "Missing operator".
     
    Вот весь код -
     

    Код:
    @echo off
    SetLocal EnableDelayedExpansion
    :ping
    cls
    set /a day_sum=0
    set /a day_count=0
    set /a mes_sum=0
    set /a mes_count=0
    set /A count=count+1
    Title Pinging number %count%
    set "site=127.255.255.255"
    set "mes=%date:~-7%"
    1>nul 2>&1 MD "%systemdrive%\AN-80\%mes%\%date%"
    set "Log=%systemdrive%\AN-80\%mes%\%date%\log.txt"
    for /f "tokens=2 delims=()" %%a in ('ping -n 4 %site%') do echo.%date% %time:~,8% %%a>> %log%
    for /f "tokens=3 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\%date%\log.txt) do set /a day_sum=!day_sum!+%%a*100 & set /a day_count=!day_count!+1
    set /a day_average=(%day_sum%)/(%day_count%)+10000
    set /a day_average_int=!day_average:~0,-2!-100
    echo.>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
    echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt
    echo.> %systemdrive%\AN-80\%mes%\Monthly-report.txt
    for /r %systemdrive%\AN-80\%mes% %%a in (Daily-report.txt) do if exist %%a type %%a>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
     
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
    set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
    set /a mes_average_int=!mes_average:~0,-2!-100
     
    echo.>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
    echo>> %systemdrive%\AN-80\%mes%\Monthly-report.txt -------------------------------------------------------------------------
    echo Средне-арифметический процент потери связи за %mes% составляет - %mes_average_int%.%mes_average:~-2%%%>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
    goto :ping

     
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
    set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
    set /a mes_average_int=!mes_average:~0,-2!-100

     
    Получается что он не считает правильно Monthly-report.txt из-за этой строки...
     
    IP адрес специально выставил такой после нескольких проходов будет видно не правильные расчеты...
    Средне-арифметический процент у меня вычисляется путем суммирования всех чисел, в данном случае - %, делённая на их количество.
     
     
    Очень надеюсь на вашу помощь и буду очень признателен...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 13:37 08-06-2010 | Исправлено: Mark_Titov, 13:37 08-06-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Вообще неплохо было бы привести кусок файла статистики - чтоб не возиться с его созданием...
    Попробуй так:
    do (set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1)

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 13:55 08-06-2010
    res2001



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

    Цитата:
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
    set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
    set /a mes_average_int=!mes_average:~0,-2!-100

    На сколько я понимаю в цикле должны выполняться первые 2 set. Тогда оформи цикл так:
     

    Код:
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do (
       set /a mes_sum=!mes_sum!+%%a*100
       set /a mes_count=!mes_count!+1
    )
    set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
    set /a mes_average_int=!mes_average:~0,-2!-100

     
     
    Добавлено:
    Не имея примера обрабатываемого файла трудновато тестировать.
    Выложи несколько строк из monthly-reprot.txt

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:02 08-06-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    И кстати - "Missing operator" - это ругань на первую часть:
    Код:
    for /f "tokens=9 delims=%% "


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 14:05 08-06-2010
    wolf0425



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

    Код:
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
    пока ничего не скажу по тому где ошибка в батнике, что он 1% потерь пишет, а вот процитированную строку лучше писать без !!, через +=
     

    Код:
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum += %%a*100 & set /a mes_count += 1
     

     
    Добавлено:

    Код:
    echo.>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
    echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt
    echo.> %systemdrive%\AN-80\%mes%\Monthly-report.txt  
    или > в нижней строке потеряно или верхняя ничего не делает

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 14:47 08-06-2010 | Исправлено: wolf0425, 16:09 08-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...пробовал ваши варианты - ругается на суммы, но считает - (опять же теряя 1% при расчетах)

    Код:
    set /a mes_sum=!mes_sum!+23.28 & set /a mes_count=!mes_count!+1
    Missing operator.
     
    set /a mes_sum=!mes_sum!+73.20 & set /a mes_count=!mes_count!+1
    Missing operator.
     
    set /a mes_sum=!mes_sum!+18.75 & set /a mes_count=!mes_count!+1
    Missing operator.

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 15:07 08-06-2010 | Исправлено: Mark_Titov, 15:08 08-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а вообще батник ругается не на выделенную красным часть строки, а на предыдущее присваивание -  
    set /a mes_sum=!mes_sum!+%%a*100  
    ещё бы ему не ругаться при %%a равном 100.00
    считает соответсвенно тоже неверно - строка трактуется как !mes_sum! + 100  
    где 100 - это целая часть от 100.00, остаток выражения отбрасывается как бред.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:08 08-06-2010 | Исправлено: wolf0425, 15:15 08-06-2010
       

    Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru