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

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



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

    Всего записей: 50 | Зарегистр. 17-11-2007 | Отправлено: 20:47 08-06-2010 | Исправлено: prostomaster, 04:04 09-06-2010
    pav



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    prostomaster
    Окно появляется как раз на время пока стартовал батник и до того как отработала скрывалка окна. Можно попробовать задать в свойствах ярлыка запуска указать "свёрнутое окно".

    Всего записей: 1856 | Зарегистр. 27-01-2002 | Отправлено: 20:54 08-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    ...вот я скрутил все вроде бы - но как указать :htm что бы он брал отчет с предыдущего месяца??

    Код:
    type %systemdrive%\AN-80\%mes%\Monthly-report.txt >> C:\"AN-80 Log".htm

     
     

    Код:
    @echo off  
    :ping  
    rem 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 -w 10"  
    set "mes=%date:~-7%"
    2>nul MD "%systemdrive%\AN-80\%mes%\" && goto :htm
    2>nul MD "%systemdrive%\AN-80\%mes%\%date%"  
    set "Log=%systemdrive%\AN-80\%mes%\%date%\log.txt"
    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 1>>%log% echo.%date% %time:~,8% %%a  
    for /f "tokens=3 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\%date%\log.txt) do set /a day_sum += %%a*100 & set /a day_count += 1  
    set /a day_average=(%day_sum%)/(%day_count%) +10000  
    set /a day_average_int = %day_average:~0,-2% -100  
    1>%systemdrive%\AN-80\%mes%\Monthly-report.txt        echo.СРЕДНЕ-АРИФМЕТИЧЕСКИЙ ПРОЦЕНТ ПОТЕРИ СВЯЗИ ЗА %mes%
    1>>%systemdrive%\AN-80\%mes%\Monthly-report.txt echo -------------------------------------------------------------------------
    1>>%systemdrive%\AN-80\%mes%\Monthly-report.txt echo.
    1>%systemdrive%\AN-80\%mes%\%date%\Daily-report.txt     echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%  
    for /f "delims=" %%a in ('dir /b /s %systemdrive%\AN-80\%mes%\Daily-report.txt') do type %%~fa 1>> %systemdrive%\AN-80\%mes%\Monthly-report.txt  
    for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set "mes_tmp=%%a" & set /a mes_count += 1 & call set /a mes_sum += %%mes_tmp:.=%%  
    set /a mes_average=(%mes_sum%)/(%mes_count%)+10000  
    set /a mes_average_int=%mes_average:~0,-2%-100  
    set mes_  
    1>> %systemdrive%\AN-80\%mes%\Monthly-report.txt (  
    echo.  
    echo -------------------------------------------------------------------------  
    echo Средне-арифметический процент потери связи за %mes% составляет - %mes_average_int%.%mes_average:~-2%%%  
    )
    sleep 10
    goto :ping
     
    :htm
    SetLocal EnableDelayedExpansion
    echo ^<body bgcolor="#336699"^> >> C:\"AN-80 Log".htm
    echo ^<title^>System^</title^> >> C:\"AN-80 Log".htm
    echo ^<img src="cid:Logo.bmp"^> >> C:\"AN-80 Log".htm
    echo ^<div align="left"^> >> C:\"AN-80 Log".htm
    echo ^<font color="#336699"^> >> C:\"AN-80 Log".htm
    echo ^<hr size="4"^> >> C:\"AN-80 Log".htm
    echo ^</div^> >> C:\"AN-80 Log".htm
    echo ^<div align="left"^> >> C:\"AN-80 Log".htm
    echo ^<font color="#ffffff"^> >> C:\"AN-80 Log".htm
    echo ^<pre^> >> C:\"AN-80 Log".htm
    type %systemdrive%\AN-80\%mes%\Monthly-report.txt >> C:\"AN-80 Log".htm
    echo ^</pre^> >> C:\"AN-80 Log".htm
    echo ^</H3^> >> C:\"AN-80 Log".htm
    echo ^</div^> >> C:\"AN-80 Log".htm
    echo ^<div align="left"^> >> C:\"AN-80 Log".htm
    echo ^<font color="#336699"^> >> C:\"AN-80 Log".htm
    echo ^<hr size="4"^> >> C:\"AN-80 Log".htm
    echo ^</div^> >> C:\"AN-80 Log".htm
    echo ^<div align="left"^> >> C:\"AN-80 Log".htm
    echo ^<font face="arial"^>^<font color="#cccccc"^>^<H6^>^<small^>Статистический модуль системы мониторинга. Copyright 2010^<small^>^</font^>^</H6^> >> C:\"AN-80 Log".htm
    echo ^</div^> >> C:\"AN-80 Log".htm
     
    :mail
    ЗДЕСЬ КОМАНДА ДЛЯ ОТПРАКИ НА МЫЛО...
    goto :ping

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



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

    Цитата:
    Собственно, возможно ли это (с помощью sed)?  

    то что мне не приходит в голову как сделать с помощью самого sed - это твое согласование по длине.
     
    так что пока так:
     

    Код:
    setlocal enabledelayedexpansion
    set /p string=<file2
    set /a str_len=0
    :strlenloop
    if "!string:~%str_len%,1!" neq "" set /a str_len +=1 && goto :strlenloop
    sed -r "4 {s/^(.{19}).{6,}/\1%string%/}" <file1  >file_out
     

     
    и это... в файле со строкой спецсимволов нет точно?
    в принципе можно и прямо из файла читать, но я только целиком умею... а сколько там строк - закладываться не хочется.

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



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

    Всего записей: 50 | Зарегистр. 17-11-2007 | Отправлено: 21:07 08-06-2010 | Исправлено: prostomaster, 04:04 09-06-2010
    wolf0425



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

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

    Цитата:
    как указать :htm что бы он брал отчет с предыдущего месяца??  

     
    вот так сделать чтоб он брал отчет из последнего по дате создания месячного каталога

    Код:
     
    :htm
    for /f "delims=" %%a in ('dir /b /ad /od /tc %systemdrive%\AN-80\') do set "mes_log=%%a"
    1>>C:\"AN-80 Log".htm (
     echo ^<body bgcolor="#336699"^>
     echo ^<title^>System^</title^>
     echo ^<img src="cid:Logo.bmp"^>
     echo ^<div align="left"^>
     echo ^<font color="#336699"^>
     echo ^<hr size="4"^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font color="#ffffff"^>
     echo ^<pre^>
     type %systemdrive%\AN-80\%mes_log%\Monthly-report.txt
     echo ^</pre^>
     echo ^</H3^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font color="#336699"^>
     echo ^<hr size="4"^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font face="arial"^>^<font color="#cccccc"^>^<H6^>^<small^>Статистический модуль системы мониторинга. Copyright 2010^<small^>^</font^>^</H6^>
     echo ^</div^>
    )
    :mail
    ЗДЕСЬ КОМАНДА ДЛЯ ОТПРАКИ НА МЫЛО...
     
    хотя генеримый тобой htm глюкав даже на первый взгляд.

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Помогите решить проблему. Ниже фрагмент кода, предназначен для записи в лог разных сообщений в кодировке 1251, этот bat-файл "компилирован" в exe с помощью Quick Batch File Compiler:
     
    FOR /F %%A IN ('cscript "%MyFiles%\date.vbs" //Nologo') DO SET "startdate=%%A"
     
    ::Содержание date.vbs: wscript.echo day(date) & "." & month(date) & "." & year(date)
     
     
    date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
    time /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
    echo ЗДЕСЬ КАКОЙ-НИБУДЬ ТЕКСТ|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
    echo.|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
     
    Приведенный выше код работает на нескольких машинах с XP и 2003 Server нормально, а на всех машинах с 2000 Server SP4 сообщает следующее: "Попытка записи в несуществующий канал". Уже не знаю что думать...
     
    Думал, может дело в невозможности обратиться к iconv.exe, т.к. путь содержит переменную компилятора, но вот такая конструкция работает:
     
    "%MyFiles%\iconv.exe" -c -s -f 866 -t UTF-8 "%TEMP%\config.tmp">"%TEMP%\config.txt"
     
    т.е. переменная компилятора %MyFiles% в Windows 2000 обрабытывается корректно. Может кто-то сталкивался?

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 21:46 08-06-2010
    wolf0425



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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:54 08-06-2010 | Исправлено: wolf0425, 22:03 08-06-2010
    NIKZZZZ



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

    Цитата:
    date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log  

    В данном случае цифры перед ">>" воспринимаются как номер канала ввода.вывода.
    Лучше , например, так:

    Код:
    >>Logs\consupdate.%startdate%.log date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:17 08-06-2010
    wolf0425



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

    Цитата:
    Лучше , например, так:
    ты наверно хотел написать так:

    Код:
    date /t| 1>>Logs\consupdate.%startdate%.log "%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251  


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:24 08-06-2010
    Mark_Titov



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

    Цитата:
    вот так сделать чтоб он брал отчет из последнего по дате создания месячного каталога

    wolf0425 Спасибо, но он не находит путь.

    Код:
    set "mes_log=%%a"

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



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

    Цитата:
    ты наверно хотел написать так

    Да.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:40 08-06-2010
    wolf0425



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

    Цитата:
    ...не находит путь.
    ну. а что находит - мне у гадалки узнавать?  
    чему равен %mes_log% на метке :mail
    и что находится в %systemdrive%\AN-80\%mes_log%\
     
    попробуй переделай так:

    Код:
    :htm
    for /f "delims=" %%a in ('dir /b /ad /od /tc %systemdrive%\AN-80\') do if exist %systemdrive%\AN-80\%%a\Monthly-report.txt set "mes_log=%systemdrive%\AN-80\%%a\Monthly-report.txt"
    1>>C:\"AN-80 Log".htm (
     echo ^<body bgcolor="#336699"^>
     echo ^<title^>System^</title^>
     echo ^<img src="cid:Logo.bmp"^>
     echo ^<div align="left"^>
     echo ^<font color="#336699"^>
     echo ^<hr size="4"^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font color="#ffffff"^>
     echo ^<pre^>
     type %mes_log%
     echo ^</pre^>
     echo ^</H3^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font color="#336699"^>
     echo ^<hr size="4"^>
     echo ^</div^>
     echo ^<div align="left"^>
     echo ^<font face="arial"^>^<font color="#cccccc"^>^<H6^>^<small^>Статистический модуль системы мониторинга. Copyright 2010^<small^>^</font^>^</H6^>
     echo ^</div^>
    )
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:54 08-06-2010 | Исправлено: wolf0425, 23:02 08-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Супер! Точто нужно! Спасибо тебе дружище...

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



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

    Цитата:
    ...прошу прощения - это я не дописал -
    type %systemdrive%\AN-80\%mes_log%\Monthly-report.txt>> C:\"AN-80 Log".htm
    ты в моем коде видишь >> C:\"AN-80 Log".htm у этой строки? или все же нет?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 23:04 08-06-2010
    Mark_Titov



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

    Цитата:
    ты в моем коде видишь >> C:\"AN-80 Log".htm у этой строки? или все же нет?

    ...Все wolf0425, теперь с вышеуказанным кодом все работает! Снимаю шляпу!
     
    Добавлено:
    wolf0425, извини, подскажи как можно сделать так что бы ip который пингуется у меня в батнике брался из txt файла? Я буду в exe конвертить его и прикручивать как сервис, и что бы при изменении пингуемого объекта не переделывать его, в этом файле просто изменить ip и все...
     
    Вот эта строка -

    Код:
    set "site=127.255.255.255 -w 10"

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov ну если ip это единственная строка в текстовом файле то так
    set /p site=<file.txt
    пример есть даже на этой странице, так что ты просто ленишься искать

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:47 09-06-2010
    Mark_Titov



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

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 06:43 09-06-2010
    barsikline



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

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

       

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

    Напрямую туда заходит, это я проверял. Тут проблема именно в 2-х пробелах в имени каталога "Инструкции и документация". Проверял если бы стояло просто "Инструкция документация", то все ок. Замута какая-то.
     

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 07:41 09-06-2010 | Исправлено: barsikline, 07:42 09-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...Подскажите плиз как убрать вывод на экран ошибки при не обнаружении файла указанного в этом параметре -

    Код:
    set /p site=<%systemdrive%\IP-AN-80.txt && goto :ping-ok

    P.s
    2>nul и  1>nul 2>&1 не помогают.
    Может я что не так делаю?
     
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 07:47 09-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