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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Код Подробнее...
    Посоветуйте как оптимизировать.
    Что код делает, можно узнать запустив батник с параметром /? или без оного. Заранее благодарен.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 12:24 11-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ComradG
    Что именно хочешь оптимизировать?
     
    Добавлено:
    ComradG
    я бы загнал текст для создаваемых файлов в файлы шаблоны, потом просто бы их копировал с нужными именами.
    Так будет проще вносить исправления, если понадобится.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Объяню суть. У меня нет MS VS. Никакой. Что надо, я из нее просто выдираю (я про сишный консольный компиль). В данном батнике генерятся урезанные шаблоны для C# (консольный проект и WinForm). Под оптимизацией подразумевается то, как можно сделать батник более компактным. Кстати, ты проверял по скорости выполнения мой батник? Как твое мнение работает быстро? А то что-то у меня сегодня башню рвет не по-детски.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 12:59 11-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ComradG
    подумай про использование шаблонов в отдельных файлах. Код сильно уменьшится
    К тому же при изменении шаблона не придется изменять код, а это бывает важно.
    У тебя там нет никаких операций, которые бы тормозили. Так что со скоростью все путем.
     
    Ты не правильно проверяешь наличие каталога в :validate
    надо так: if not exist %2\nul (

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если мой батник переделать не много по другому
    чтобы при д/д файлы копировались в папку Images и запускался процесс обработки, вот только здесь две проблемы:
    1. чтобы была проверка на название картинок, если название картинок повторяются то переименовать:
    2. как сделать  чтобы обработка была не всех картинок, которые в папке Images, а только новых.

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 13:27 11-06-2010 | Исправлено: lorents, 13:27 11-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    и еще
    процедуры :console и :winform можно совсем убрать, а вместо них сразу переходить на :validate

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



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

    Цитата:
    if not exist %2\nul

    Ну, это не критично. Хотя если учесть, что я все время перестраховываюсь, то большое спасибо за напоминание. А по поводу шаблонов - не хочется заморачиваться. Кстати, не знаешь как менять временной штамп файлов через консоль? Я про дату создания. Хотелось бы видеть сгенерированные файлы с одним и тем же штампом времени создания и модификации. Ковыряние wmic пока не принесло результатов.
     
    Добавлено:

    Цитата:
    процедуры :console и :winform можно совсем убрать, а вместо них сразу переходить на :validate

    Ne mettez dans?
    Дядь, это приведет к развалу батника - аргументы перестанут фурычить.
     
    Добавлено:

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

    Как вариант - проверка штампа времени создания.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 13:37 11-06-2010
    res2001



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

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

    не перестанут - аргументы у тебя разбираются второй раз в :keycheck
     

    Цитата:
    Кстати, не знаешь как менять временной штамп файлов через консоль?  

    Знаю - используй шаблоны и будут тебе итоговые файлы с временем и датой шаблона.
     
    Добавлено:
    ComradG
    Вот как будут выглядеть процедуры :console и :winform  с шаблонами

    Код:
    :generate_console
    copy /A /Y .\Console\*.* %2
    echo Done.
    goto:end
    :generate_winform
    copy /A /Y .\WinForm\*.* %2
    echo Done.
    goto:end
     

     
    Добавлено:
    шаблоны сделай выполнением собственного же батника, используй полученные файлы в качестве шаблонов. Размести их в подкаталоге \Console и \WinForm каталога где лежит батник
     
    Добавлено:
    ComradG
    Ну вот кароче держи
    Подробнее...

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



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

    Цитата:
    не перестанут - аргументы у тебя разбираются второй раз в :keycheck

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

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

    Zum teufel! Вопрос был не о шаблонах. В никсах ест  такая тулза, называется touch, она меняет метки времени. В Win2k8 есть что-то подобное, а вот как средствами самой системы (XP и выше) проштамповать файло заново, похоже этим вопросом еще никто не задавался.
     
    Добавлено:

    Цитата:
    Ну вот кароче держи  
    Подробнее...

    Achtung! Полный Achtung! Теперь запусти батниц без параметров. Он тя просто пошлет в /dev /nul.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 14:00 11-06-2010
    wolf0425



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

    Код:
    в смысле - пихнуть в шапку уникальную строку со временем с точностью до миллисекунд? А радость то в чем, и чем %random%%random% реально хуже?
    а по уникальному title можно через tasklist вычислить pid и прибить только нужную версию батника  
    вычисление pid тут совершенно лишнее - по уникальному title батник и так можно замечательно прибить, у тебя хоть и накрученнее, но на практике ничем не лучше прибивания по неуникальному, но выделенному title типа пресловутого killme.
     

    Цитата:
    я тоже над этим голову ломал, пока остановился на варианте, переводить, скажем дату и время файла - например 2006 05 10 12:36 - в секунды и текущие дату и время - в секунды и сравнивать через if  
    переводить для того чтобы сравнивать - в большинстве случаев лишнее, обычно достаточно просто точно знать год-месяц-дату-часы-минуты файла. В смысле - гарантировано не попутав месяц с датой.
    пока проще всего это в скрипт выносить и не мучаться.
     

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ComradG
    Ну ладно уговорил. Толком не тестировал.
    Ну сделай первый if так

    Код:
    if "%1"=="" (
      goto:help
    ) else if "%1"=="-?" (
      goto:help
    ) else if "%1"=="/?" (
      goto:help
    ) else if "%1"=="-c" (
      goto:validate
    ) else if "%1"=="/c" (
      goto:validate
    ) else if "%1"=="-w" (
      goto:validate
    ) else if "%1"=="/w" (
      goto:validate
    )  

    и будет тебе счастье.
     
    Если с шаблонами вариант не подходит, тогда с датами готового ответа нет, посмотрю.
     
    Запустил без параметров - все нормально, по моему.

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



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

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

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



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

    Цитата:
    В никсах ест  такая тулза, называется touch, она меняет метки времени.
    Touch for windows - думаю это то что надо.

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Рульнай шедулер- nncron. Язык помощнее да и вообще- православен он.
    Качай nncron, а с задачамите уже помогут))) И код куда хошь спрячешь, и удобнее им задачи твои исполнять...
    Батнеги тоже хороши, но масштаб может быть мелковат)))

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 16:52 11-06-2010
    wolf0425



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

    Цитата:

    Код:
    Знаю - используй шаблоны и будут тебе итоговые файлы с временем и датой шаблона.
    Zum teufel! Вопрос был не о шаблонах. В никсах ест  такая тулза, называется touch, она меняет метки времени. В Win2k8 есть что-то подобное, а вот как средствами самой системы (XP и выше) проштамповать файло заново, похоже этим вопросом еще никто не задавался.  
    да нафиг всё это не надо для случая моздания коротких  текстов - тут хватит простого копирования через type, время проставится свежее.
     
    но тут действительно не очень то полезно таскать с батником 4 дополнительных файла,  из которых будет генериться проект.
    Я бы наверно засунул шаблоны в хвост самого батника без каких-то echo и выдирал оттуда нужные куски или через sed или через for

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:00 11-06-2010 | Исправлено: wolf0425, 18:39 11-06-2010
    Mark_Titov



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

    Цитата:
    но масштаб может быть мелковат)))

    Что имеешь в виду?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 17:55 11-06-2010
    WesternLight

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

    Цитата:
    наверно потому что без компиляции у тебя действуют настройки из ветки HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe  - ты их отдельно изменял, а при запуске из эксплорера скомпилированного - настройки будут из HKEY_CURRENT_USER\Console\имяпрограммы.exe

    wolf0425, твоими подсказками, код, который будет в начале всех моих батников
     

    Цитата:
    @echo off
    chcp 1251>nul
     
    reg.exe query "HKCU\Console" /v FontSize|find "REG_DWORD    0x100000">nul
    if %errorlevel%==1 (
    reg.exe add "HKCU\Console" /v FontSize /t REG_DWORD /d 1048576 /f>nul
    )
     
    reg.exe query "HKCU\Console" /v FontFamily|find "REG_DWORD    0x36">nul
    if %errorlevel%==1 (
    reg.exe add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f>nul
    )
     
    reg.exe query "HKCU\Console" /v FontWeight|find "REG_DWORD    0x190">nul
    if %errorlevel%==1 (
    reg.exe add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f>nul
    )
     
    reg.exe query "HKCU\Console" /v FaceName|find "Lucida Console">nul
    if %errorlevel%==1 (
    reg.exe add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f>nul
    )

     
    О, да, теперь все батники в 1251 и работают без кракозябр на любом компе, ура! Предлагаю добавить в шапку, вот если бы мне кто сказал сразу: "добавь себе этот код в начало и не парь мозг" жить мне стало бы легче.

    Всего записей: 61 | Зарегистр. 07-10-2007 | Отправлено: 19:58 11-06-2010 | Исправлено: WesternLight, 20:06 11-06-2010
    wolf0425



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

    Цитата:
    wolf0425, твоими подсказками, код, который будет в начале всех моих батников
    к тому моменту когда батник доходит до этого кода - консоль уже открыта, так что в ней то ничего не поменяется... или поменяется?
    т.е. перезапустить такой батник увидев кракозябры - поможет (если в настройки руками не лазил). и следующие батники будут пучком.
    а вот с теми что ранее как-то настраивались - ничего уже не поменяется, только если тереть.
     
    наверно я маньяк скобконенависник, но проверки я бы переписал в 4 строки:

    Код:
    reg.exe query "HKCU\Console" /v FontSize   | 1>nul find "REG_DWORD    0x100000" || 1>nul reg.exe add "HKCU\Console" /v FontSize /t REG_DWORD   /d 1048576 /f
    reg.exe query "HKCU\Console" /v FontFamily | 1>nul find "REG_DWORD    0x36"     || 1>nul reg.exe add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f
    reg.exe query "HKCU\Console" /v FontWeight | 1>nul find "REG_DWORD    0x190"    || 1>nul reg.exe add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f
    reg.exe query "HKCU\Console" /v FaceName   | 1>nul find "Lucida Console"        || 1>nul reg.exe add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f

     

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



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

    Код:
    C:\Documents and Settings\admin\Desktop\Services  v3.0>echo off

     
    В начале батника как всегда стоит - @echo off
    Но все равно пишет путь папки от куда запустился батник.
    В чем прикол?

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



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

    Цитата:
    Но все равно пишет путь папки от куда запустился батник.
    В чем прикол?
    ну наверно в батнике есть какая-то команда, которая это пишет
    кто ж тебе доктор - выключить подавление эха и самому посмотреть после какой конкретно строки кода это пишется на экране - не судьба совсем? или у тебя и на батник состоящий из одной команды @echo off такое пишет?
    тогда расскажи что пишет set comspec

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:24 11-06-2010 | Исправлено: wolf0425, 22:08 11-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