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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 | Цитировать | Сообщить модератору
    NIKZZZZ

    Цитата:
    В свое время я решал эту задачу так - сопировал cmd.exe с свой каталог, переименовывал его, и через него запускал через него нужный батник, после чего убивал переименованный cmd.exe.

    как писал wolf0425, можно в батнике менять заголовок окна командой title и тогда taskkillом нормально найдется нужный процесс.

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



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

    Цитата:
    Так то понятно, вопрос как это сделать средствами батника?
    какие видятся проблемы?
    вот например как найти pid "своего" cmd  
    (если батник запускался отдельным окном, а не руками в окне консоли. но это просто пример поиска нужного по commandline )

    Код:
    wmic process where "name="cmd.exe"" get commandline,processid | find /i "%~f0" 1>file.tmp
    set /p pid=<file.tmp
    set /a pid = %pid:~-12%

    но если второй батник тоже сам пишешь - обычно проще не извращаться, установить в нем уникальный title и по этому title - его и закрывать, тупо тасккиллом.

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



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

    Цитата:
    как писал wolf0425, можно в батнике менять заголовок окна командой title и тогда taskkillом нормально найдется нужный процесс.

    Можно, но хочется не отлаживать батник, а сразу получить гарантированный результат. На чужой машине возникает куча проблем, а они нужны?
    wmic - можно, конечно, но это уже не батник,
    проще vbs скрипты использовать.
     
     
     
     

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



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

    Цитата:
    wmic - можно, конечно, но это уже не батник,  
    это ешё почему не батник? именно для использования в батниках wmic и создан.
    Цитата:
     
    Можно, но хочется не отлаживать батник, а сразу получить гарантированный результат. На чужой машине возникает куча проблем, а они нужны?  
    какие такие проблемы на чужой машине, если оба батника - твои?
    установить заголовок окна и убить окна по заголовку - эти проблемы помешать не могут, title /? и taskkill /? прочитать после подсказки наверно тоже несложно...
     

    Цитата:
    проще vbs скрипты использовать.  
    тоже вариант, но это - лишние файлы плодить, для чужой машины не комильфо..

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



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

    Цитата:
    какие такие проблемы на чужой машине

    Я привык к тому, что система голая, например WinPe. Там есть только cmd.exe, wmic нет.

    Цитата:
    убить окна по заголовку

    Если его сам создаешь.
     
     

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как в CMD работают дескрипторы (создание [3-9], перенаправление, чтение, запись и т.д.). И  можно ли в голом CMD использовать каналы (pipe), и как?

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



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

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:53 06-07-2010 | Исправлено: wolf0425, 22:00 06-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую всех. Недавно задавал здесь вопрос, каков максимальных размер переменной. Получил ответ от res2001, что 8 kb. Честно говоря, я ранее предполагал, что существует лимит не на размер переменной, а на размер всего массива переменных (ну, понятно, первый зависит от второго), если не изменяет память, то во времена DOS было именно так. Чисто ради любопыства решил проверить.

    Код:
    @Echo Off
    :0
    Set A=%A%1
    Echo %A%>1
    GoTo :0

    Когда батник в консоли завершился с надписью "The inbut line is too long." проверил размер получившегося файла. 8186 b. Т. е., действительно, около 8 kb (8192 b). 6 байт мелкомягкие всё же закроили .

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    А тебе не кажется странным что количество сиволов в куске
    Код:
    Set A=
    равно ровно 6? Сделай имя переменной AAAAA и мелкомягкие закроят 10 байт

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 07:39 07-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Нет, почему-то только 9 (проверил, новая переменная "AAAAA", т. е. 5 символов).

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



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

    Цитата:
    Когда батник в консоли завершился с надписью "The inbut line is too long." проверил размер получившегося файла. 8186 b. Т. е., действительно, около 8 kb (8192 b). 6 байт мелкомягкие всё же закроили .
     

    полезный опыт

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

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте, уважаемые форумчане.
    Подскажите, пожалуйста, как создать папку имя которой будет дата создания файла посредством bat-файла?
     
    Т.е. есть папка - в ней файлы с разными датами создания.  
    Хотелось бы, чтобы рядом с этими файлами создались папки - имена которых будут даты создания файлов.

    Всего записей: 54 | Зарегистр. 23-01-2009 | Отправлено: 10:03 07-07-2010
    res2001



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

    Код:
    for %%a in (*.*) do md %%~da

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



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

    Цитата:
    полезный опыт

    кстати у set /p aa=<file   - в переменную попадает максимум 1023 байта

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



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

    Цитата:
    set /p aa=<file

    Ух, ты! Оказывается, можно делать вывод в переменную напрямую, без for. Я, думал ключ /p для другого, для ввода вручную. Очень полезная информация.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 10:33 07-07-2010 | Исправлено: BVV63, 10:40 07-07-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Ну а теперь давай разберемся что произошло:
    - во первых в файле на две единицы меньше чем размер - перевод строки затесался
    - во вторых
    Код:
    @ECHO OFF
    :0
    CLS
    ECHO Проблема в SET
    SET A=%A%1
    CLS
    ECHO Проблема в ECHO
    ECHO %A%>1
    GOTO :0
    и можно смотреть на чем споткнулись - конкретно на ECHO...

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 10:47 07-07-2010
    mugil_cephalus

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

    Цитата:
    Приветствую всех. Недавно задавал здесь вопрос, каков максимальных размер переменной. Получил ответ от res2001, что 8 kb.  

    NB  
    здесь - http://forum.ru-board.com/topic.cgi?forum=5&topic=33080&start=480#11
    kostya740 писал

    Цитата:
    найдено ограничение.  
    Внутри IF код может быть максимум 3586 строк.  
    Советую добавить в шапку.

    я не проверял  и не встречал подобные батники  
    косвенно по сабжу , но , любопытства ради  , к сведению...

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте,
    Интересуют два вопроса:
     
    Можно ли использовать if defined для переменных цикла?
      и
    Как разобрать строку на подстроки, если заранее не известно кол-во разделителей?

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 11:03 07-07-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    И проверочный код на отказ присваивания:
    Код:
    @ECHO OFF
    SET /A B=0
    :0
    SET A=^
    %A%^
    1
    SET /A B+=1
    CLS
    ECHO %B%
    GOTO :0
    получается 8188...
     
    Добавлено:
    Ненамного ECHO пережил

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 11:04 07-07-2010
    res2001



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

    Цитата:
    Можно ли использовать if defined для переменных цикла?

    Проверь и нам расскажешь

    Цитата:
    Как разобрать строку на подстроки, если заранее не известно кол-во разделителей?

    ну укажи в "tokens=1-20" к примеру.
    Другой вариант, можно написать рекурсивную процедуру, которая вызывает сама себя с остатком неразобранных параметров.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:27 07-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