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

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



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

    Цитата:
    И ещё. Как можно узнать длину переменной?

    записать переменную в новый файл и узнать размер файла с помощью %~z1.

    Цитата:
    Можно ли изменять эти фрагменты?  

    можно делать операцию замены, можно брать части, смотри set /?
     
    Добавлено:

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

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

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



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

    Цитата:
    записать переменную в новый файл и узнать размер файла с помощью %~z1.

    По-другому никак? Недолюбливаю иметь дело с временными файлами.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 11:25 06-07-2010 | Исправлено: BVV63, 11:25 06-07-2010
    NIKZZZZ



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

    Цитата:
    По-другому никак?  


    Код:
    Set Var=1234567890
    Set xx=%Var%
    Set Count=0
    :_2
    If "%xx%"=="" GoTo _1
    Set xx=%xx:~0,-1%
    Set /a Count+=1
    GoTo _2
    :_1
    Echo Length = %Count%


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:35 06-07-2010
    mugil_cephalus

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

    Цитата:
    можно и vbs  

    что то не нашел, хотя казалось видел где-то на Программирование "удобняшек" на VBScript , все перерыл, но не нашел...  
     
    non-subject:
    зато нашел vbs-function dos-string to ansi-string http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=140#17

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Спасибо. А нельзя ли попроще не для общего случая, а для частного. Переменная может содержать либо 1 символ, либо 2, и мне нужно узнать сколько именно.
     
    Добавлено:
    Просто подобных проверок должно быть много, и не хотелось бы слишком уж раздувать батник.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 11:52 06-07-2010 | Исправлено: BVV63, 11:54 06-07-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Цитата:
    По-другому никак?  
    ограничивается только потребностями и фантазией:
    Код:
    set "slength=0" & for %%a in ( 512 256 128 64 32 16 8 4 2 1 ) do set /a test=!slength! + %%a - 1 && call set test=%%str:~!!test!!,1%%&& if not "!!test!!"=="" set /a slength+=%%a

     

    Цитата:
    Переменная может содержать либо 1 символ, либо 2, и мне нужно узнать сколько именно.  
    ну и проверь наличие второго, вытащить из цикла проверку энного - несложно же.

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



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

    BVV63

    Цитата:
    Спасибо. А нельзя ли попроще не для общего случая, а для частного. Переменная может содержать либо 1 символ, либо 2, и мне нужно узнать сколько именно.

    Подточив немного способ предложенный NIKZZZZ получим:

    Код:
    if "%xx:~1,1%" equ "" (echo 1 символ) else (echo 2 символа)

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



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

    Цитата:
    Переменная может содержать либо 1 символ, либо 2

     

    Код:
    If "%Var:~2,1%"=="" ... (переменная содержит менее двух символов)
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:09 06-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    OK, подходит.
    Я подумал, что может кто подскажет решение ещё лучше, если я опишу задачу. Приходится работать с двузначными числами и выводить их также в двузначном виде. Допустим:
    Set Var=03
    Set Var+=1
    А ответом будет однозначное число 4.
    Ну, если ничего лучшего выжать нельзя, использую Ваш способ.
     
    Добавлено:
    NIKZZZZ
    О, пока писал, Вы тоже ответили. Пожалуй, самое лучшее.
     
    Добавлено:
    Видимо, так:
    If "%Var:~2,1%"=="" Set Var=0%Var%

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:11 06-07-2010 | Исправлено: BVV63, 12:17 06-07-2010
    wolf0425



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

    Цитата:
    Видимо, так:
    If "%Var:~2,1%"=="" Set Var=0%Var%
    вообще-то позиции символов в переменной нумеруются начиная с нуля, так что тут вписана проверка наличия третьего символа, а не второго. но подход работающий.
     
    для дополнения ведущими нулями можно ещё и вариант без проверок:
    Код:
    Set "Var=00%Var: =%"
    Set "Var=%Var:~-2%"


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



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

    Цитата:
    set "slength=0" & for %%a in ( 512 256 128 64 32 16 8 4 2 1 ) do set /a test=!slength! + %%a - 1 && call set test=%%str:~!!test!!,1%%&& if not "!!test!!"=="" set /a slength+=%%a  

    Супер
    Двоичная система в действии!
    Взял себе в архив полезняшек.

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да тут вообще пора делать отдельный архив полезняшек/удобняшек отдельным топиком- и новичкам полезно, и икать удобнее и вообще проще и лучше... А там пару комментариев прикрутив можно и учебник неплохой по .BAT в .CHM/.MHT сделать...

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 13:18 06-07-2010
    older

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

    Всего записей: 332 | Зарегистр. 15-02-2003 | Отправлено: 16:31 06-07-2010
    res2001



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

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    что-то не получается, пишет :
    Код:
    Ошибка: Не удается найти процесс "xxxxx.cmd".

    Всего записей: 332 | Зарегистр. 15-02-2003 | Отправлено: 16:44 06-07-2010
    NIKZZZZ



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

    Цитата:
    подскажите, как из одного батника завершить работу другого батника?

    Не знаю, насколько это реально, taskkill может убить процесс, но как определить нужный? Они для любого батника cmd.exe.
     
     

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



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

    Цитата:
    Не знаю, насколько это реально, taskkill может убить процесс, но как определить нужный? Они для любого батника cmd.exe.
    определить нужный можно или по специально установленному заголовку окна (тогда выбрать самим taskkill ) или по ключам командной строки (предварительно, и передавая taskkill  уже нужный pid)

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



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

    Цитата:
    передавая taskkill  уже нужный pid

    Так то понятно, вопрос как это сделать средствами батника?

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:53 06-07-2010
    older

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    wolf0425
    NIKZZZZ
     
    нет, все нашел
    сделал поиск по заголовку окна:

    Код:
    taskkill.exe /FI "WINDOWTITLE eq bla-bla-bla...*"


    Всего записей: 332 | Зарегистр. 15-02-2003 | Отправлено: 16:55 06-07-2010 | Исправлено: older, 16:55 06-07-2010
    NIKZZZZ



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

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:58 06-07-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