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

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



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

    Цитата:
    set logfile=Images.csv
    echo File name;Original Size;Output Size;Change in Bytes;% of Original >>%logfile%  

    не выходит, это сообщение просто является в запущенном батнике

    Цитата:
    на счет кодировки: как писал wolf0425 поставь второй командой в батнике

    сделал, работает, спасибо

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:01 28-06-2010
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ох, ребята. Спасибо всем кто откликнулся.
    Сейчас навалилось куча проблем и стало несколько не до этого.
    Я тогда как разберусь, опробую ваши советы и отпишусь.  
    Спасибо ещё раз.  

    Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 12:04 28-06-2010
    res2001



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

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

    Наверное в конце команды нет оператора перенаправления >>%logfile%
     
    Добавлено:
    извини, забыл экранировать символ процента. Вот так правильно:
     
    echo File name;Original Size;Output Size;Change in Bytes;%% of Original >>%logfile%  

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:05 28-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    получилось, но одна проблема, теперь это строка появляется в отчете каждый раз, как только запускается batch, как сделать чтобы эта строка была только в первой строчке?
    Думаю можно сделать так, если отчет уже создан, то ничего не надо писать, а если его нет, то создать отчет, и вписать в первую строчку

    Код:
    echo File name;Original Size;Output Size;Change in Bytes;%% of Original >>%logfile%  


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:30 28-06-2010
    res2001



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

    Цитата:
    Думаю можно сделать так, если отчет уже создан, то ничего не надо писать, а если его нет, то создать отчет, и вписать в первую строчку  


    Код:
    if not exist %logfile% echo File name;Original Size;Output Size;Change in Bytes;%% of Original >>%logfile%

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:35 28-06-2010
    wolf0425



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

    Цитата:
    извини, забыл экранировать символ процента. Вот так правильно:
    echo File name;Original Size;Output Size;Change in Bytes;%% of Original >>%logfile%  
    учишь вас, учишь, а привычки вписывать перенаправление в начало команды, а не в хвост - привить так и не удается.
    хороший пример разницы.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:44 28-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    получилось, спасибо.
    Вроде все остальное работает как надо :applause:
     
    Добавлено:
    wolf0425
    может ты посмотришь, если есть время и желание, весь batch и скажешь свои замечания и предложения?
     
    ImageOptimizer.bat

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:45 28-06-2010 | Исправлено: lorents, 12:56 28-06-2010
    boy999



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Set WSHShell = WScript.CreateObject("WScript.Shell")  
    CurDir = WSHShell.CurrentDirectory  
    WSHShell.Run CurDir & "\\mpr\\MPR.exe /export", 0
     
     
    Это скрипт всем хорош, даже работает, но нуно, чтобы он запускал mbr в скрытом окне!
    Очень нуно!
     
    Можно ли  научить его запускаться в скрытом режиме!?

    Всего записей: 2030 | Зарегистр. 19-05-2008 | Отправлено: 13:09 28-06-2010
    res2001



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

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

    В чем цимес перенаправления в начале команды?  
    У меня уже многолетняя привычка в конец вставлять, легко не отделаться
     
    Добавлено:
    разницу в примере я уловил, но ведь все равно не так как хотелось.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:10 28-06-2010
    mugil_cephalus

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

    Цитата:
    Приветствую. Вопрос, наверное, глупый, но всё равно. Никто не слахал об каком-либо отладчике для "батаники"? Любительского изготовления, понятно... А то, бывает, строишь конструкции из 3-х - 4-х уровней по паре страниц текста, нифига не работает, а ты по-полчаса нич-чо понять не можешь. Понемногу упрощаешь конструкцию, ищешь ошибку, но на это уж больно много времени уходит.
     

    echoon.exe  
    закоментируй @echo off и смотри сверху вниз какую строку скрипт не так, как тебе нужно отрабатывает

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:22 28-06-2010
    res2001



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

    Цитата:
    WSHShell.Run CurDir & "\\mpr\\MPR.exe /export", 0  

    по моему последний 0 и отвечает за создание скрытого окна.
    http://msdn.microsoft.com/en-us/library/d5fk67ky%28VS.85%29.aspx
    У меня скрипт отрабатывает правильно, окно не появляется. Правда я не на MPR эксперементировал.
     
    Добавлено:
    mugil_cephalus
    будет ведь искать
    Цитата:
    echoon.exe


    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:25 28-06-2010
    BVV63



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

    Цитата:
    закоментируй @echo off и смотри сверху вниз какую строку скрипт не так, как тебе нужно отрабатывает

    Безусловно я так и делаю. Но в for... in... do... это мало помогает, особенно если их несколько вложенных. Кроме того, в некоторых случаях сообщение об ошибке вылазит совсем не там, где она находится  (что меня поначалу удивляло, потом привык). А так по мелочам лоханёшься, скобку там забудешь или ещё чего, и сидишь, недоумеваешь, почему не работает.
     
    Добавлено:
    Да, ещё. Никто не подскажет, как в разименованной переменной использовать знак процента? В некоторых случаях из реестра достаётся, скажем, имя файла, в котором переменная %SystemRoot%, и ничего не работает. Приходится лезть в реестр, заменять переменную, что весьма геморно.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:43 28-06-2010 | Исправлено: BVV63, 13:48 28-06-2010
    mugil_cephalus

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

    Цитата:
     Но в for... in... do...  

    а ты следи за отработкой цикла на предмет соответствия кода и stdout и stderr по-строчно

    Цитата:
    А так по мелочам лоханёшься, скобку там забудешь или ещё чего,  

    посчитай в пределах одного цикла for или ветвления if все открытые скобки и закрытые ( ну не 100 же их )  
    может тебе будет полезна подсветка синтаксиса - http://forum.ru-board.com/topic.cgi?forum=5&topic=24956&start=0

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:54 28-06-2010
    wolf0425



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

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

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:56 28-06-2010 | Исправлено: wolf0425, 13:59 28-06-2010
    BVV63



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

    Цитата:
    может тебе будет полезна подсветка синтаксиса

    Спасибо, у меня есть.

    Цитата:
    посчитай в пределах одного цикла for или ветвления if все открытые скобки и закрытые ( ну не 100 же их )

    Ну скобки я так, для примера привёл. Сосчитать их, особенно используя поиск, действительно несложно.

    Цитата:
    а ты следи за отработкой цикла на предмет соответствия кода и stdout и stderr по-строчно

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

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 14:05 28-06-2010 | Исправлено: BVV63, 14:06 28-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Понял. Начну переучиваться
     
    Добавлено:
    BVV63

    Цитата:
    Да, ещё. Никто не подскажет, как в разименованной переменной использовать знак процента? В некоторых случаях из реестра достаётся, скажем, имя файла, в котором переменная %SystemRoot%, и ничего не работает. Приходится лезть в реестр, заменять переменную, что весьма геморно.

    команда call два раза разъименовывает переменные.

    Код:
    @echo off
    set tt=%%systemroot%%
    echo %tt%
    call echo %tt%
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:09 28-06-2010 | Исправлено: res2001, 14:18 28-06-2010
    mugil_cephalus

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

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

    ну когда ты составлял код , ты же предполагал какого результата ждешь от строки N и  если echo on включено то смотри то ли, что задумывалось выдается на каждой строке ; если там какая переменная , то втавь echo._%var%_ потом закоментируешь, если все правильно отрабатывается ; или echo._%%~i_ ; я такое сразу пишу в коде, а потом если все ок - удаляю или rem

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:15 28-06-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    OK, попробую.
    mugil_cephalus
    Хорошо, попробую завтра написать для себя батник, аргументом которого был бы исследуемый батник, и он бы его пошагово (построчно) выполнял (посредством Pause).

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 14:20 28-06-2010
    mugil_cephalus

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

    Цитата:
    (посредством Pause).

    толку от паузы - ноль

    Код:
    mode con lines=6000

    сейчас пример поищу...

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:23 28-06-2010
    boy999



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

    Цитата:
    У меня скрипт отрабатывает правильно, окно не появляется. Правда я не на MPR эксперементировал.  

     
     
    Разрабы встроили защиту от скрытого процесса, сцуко.
    Её-то и надо преодолеть.
     
    Ммм!?

    Всего записей: 2030 | Зарегистр. 19-05-2008 | Отправлено: 14:25 28-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