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

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

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

    Цитата:
    ?????????  

    52-ая стр.

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Столкнулся с проблемой на Win x64:
    нужно внести данные в реестр по адресу

    Код:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform

    Если это делать ручками, через "Выполнить", то все проходит нормально. Если же команду

    Код:
    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" ......

    выполнить из скрипта, результат будет по адресу
    Код:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform

    Как избежать этого? Т.е. чтобы команда из скрипта отрабатывалась именно в ...Microsoft..., а не в ...Wow6432Node\Microsoft...

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 15:19 03-06-2010
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, может задачка сложна, но вдруг есть более-менее готовое решение.
     
    МТС присылает детализации звонков по сотрудникам в HTML-формате. В файлах - детализации кучи сотрудников + много всякой информации.
    Нужно обработать такой файл и на выходе получить файлы по каждому моб. номеру с ТОЛЬКО детализацией. Желательно CSV-формат, т.е. сам файл будет выглядеть примерно:

    Код:
    Дата,Время,Номер,Зона ПС,Зона ВТК,Услуга,,Длит. мин:сек,Стоимость руб.
    01.04.2010,0:32:17,79602347464,,,Телеф.,,0:28,"0,9733"
    01.04.2010,22:25:37,<--+79115807811,Ф-л МТС: Владимир,,Телеф.,,2:19,"226,269"

    Пример файла МТС

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:29 03-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    cluster
    Задачка, по моему, не для батников.  
    Смотри в сторону JavaScript или VBScript, для разбора html можно использовать объект xmldom.

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

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как можно сделать "ввод с консоли" с выводом введенного в файл, например, вроде диалога
     
    Введите дату в формате (YYYY MM DD):
    1111 11 11
     
    В результате должен появиться файл с введенной информацией.
     
    Предполагаю, что надо  
    1. сохранить/считать в переменную (этого как сделать я как раз не знаю)
    2. вывести в файл, например echo %v% > file.dst

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 17:03 03-06-2010 | Исправлено: BagaBaga, 17:04 03-06-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BagaBaga
    set /p info="BlaBlaBla: "
    echo %info% | date.exe
    echo %info% >> C:\blablabla.txt

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 17:13 03-06-2010 | Исправлено: us0r, 17:18 03-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Цитата:
    52-ая стр.
    не, так и  не решил.
    Если есть конкретные идеи - предложи пример кода.  
    прерывание паузы произвольной клавишей - обязательно,  
    способ должен быть адаптируем для случая нескольких одновременно запущенных копий батника.
     
    cluster
    Цитата:
    Ребят, может задачка сложна, но вдруг есть более-менее готовое решение.  
    если на батнике то задача сводится к тому чтоб
    1. найти чем сконвертировать из utf-8 в win1251 или OEM
    2. написать конфиг для sed, который и выдерет нужные поля в нужном порядке.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:23 03-06-2010 | Исправлено: wolf0425, 17:34 03-06-2010
    us0r



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

    Код:
    echo u | pause > nul

    Прерывает паузу. Задержка через пинг. Проверку нажатия клавиши- через if.

    Цитата:
    способ должен быть адаптируем для случая нескольких одновременно запущенных копий батника.

    Это ты о чём?

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 17:48 03-06-2010 | Исправлено: us0r, 17:51 03-06-2010
    wolf0425



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

    Цитата:
    Проверку нажатия клавиши- через if.  
    это как?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:37 03-06-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Заговорился... извини... через for.

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 18:47 03-06-2010 | Исправлено: us0r, 18:48 03-06-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    кто знает, как в х64 винде запустить батник именно 64-битной версией cmd.exe, а не cmd.exe из sysWOW64, что происходит по умолчанию??

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 18:57 03-06-2010
    wolf0425



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

    Цитата:
    Заговорился... извини... через for.
    это как?
    я же сразу просил пример кода...

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Никак. Тут только еретические VBScript/PowerShell тебе помогут.
    Если ты о реестре- копай в гугле оформление нужных веток реестра.
    Но проще задать вопрос в теме о WSH/VBScript (JScript).

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 19:33 03-06-2010
    mugil_cephalus

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

    Код:
    start "" cmd /k "title yourtitle &pause &exit"

    потом по tasklist /fi отлавливать (не могу проверить - у меня баговый tasklist от win 5.1 ru )
     
     
    Добавлено:
    Free_Soft
    это не подойдет - http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=2020#17

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 22:24 03-06-2010 | Исправлено: mugil_cephalus, 22:33 03-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalusну, а как сам этот поток, поставленный на паузу, прибивать по истечении таймера ?
    через taskkill по уникальному имени окна, что-ли? интересно, если окна не видно - сработает?

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

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

    Цитата:
    интересно, если окна не видно - сработает?

    а какая разница в фокусе?
    taskkill же не по фокусу , а по фильтру - taskkill /fi windowtitle
     
    Добавлено:
    cluster
    похожую задачу решали тут - http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=1340#9
     
    Добавлено:
    wolf0425
    или так, например -
    Цитата:
    CMDOW [window | /T] [/B] [/F] [/P]
    window Window to list. If not specified all windows are listed. Specify a window by its unique handle in hexadecimal format (0x1A0142) or its caption (case insensitive). Windows without captions may be specified by their ClassName. The At symbol '@', may be used to refer to this window ie 'CMDOW @'. Use double quotes for captions containing whitespace or control characters.  
     
    см. - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=780#18

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:28 03-06-2010 | Исправлено: mugil_cephalus, 23:50 03-06-2010
    wolf0425



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

    Цитата:
    taskkill же не по фокусу , а по фильтру - taskkill /fi windowtitle  
    засада:
    Код:
    start /b "" cmd.exe /k "pause & exit & %key%"
    title killme
    taskkill /f /FI "WINDOWTITLE eq killme"

    закрытия окна НЕ происходит.
     
    т.е. taskkill то говорит что всё закрыл успешно, и повторный запуск говорит что такой задачи уже нет, а вот cmd.exe продолжает как ни в чем не  бывал висеть в памяти, держать окно и ждать нажатия на кнопку
     
    Добавлено:
    taskkill /f /t - прибил  все же...
     
    ну в общем как-то так, длинновато но вроде сокращать нечего:
    Код:
    set count=30
    set key=%random%
    start /b "" cmd.exe /q /k "pause & exit & %key%"
     
    :timerloop
    title %count% Ready: %~nx1 %ssize%%%  
    set /a count -= 1
    ping -n 2 localhost 1>nul 2>nul  
    if %count% leq 0 (title killme) & taskkill /f /t /fi "windowtitle eq killme" 2>nul 1>nul
    wmic process where (name='cmd.exe') get commandline | 1>nul findstr /r /b cmd.*pause.*exit.*%key% && goto :timerloop
    exit

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:38 04-06-2010 | Исправлено: wolf0425, 01:22 04-06-2010
    barsikline



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите разобраться.
    Необходимо чтобы с ftp качались все файлы или целиком папка дата которых больше по сравнению с другими.
    сейчас код такой:
     
    (echo user anonymous anonymous
    echo cd "Инструкциия и документация/Техническая документация/МТ1 РТО и ОФЗ/"
    echo ls -t) | ftp -n 10.22.33.242 > filelist.tmp
     
    set /p newest= < filelist.tmp
     
    (echo user anonymous anonymous
    echo cd "Инструкциия и документация/Техническая документация/МТ1 РТО и ОФЗ/"
    echo bin
    echo hash
    echo prompt
    echo get %newest%) | ftp -n 10.22.33.242
     
    Этот батник качает один файл в соответствии с полученным листом, отсортированным по времени создания (команда "ls -t" ). Но необходимо так, чтобы качались, к примеру, все файлы (или папки) за день в который были они выложены, кроме файлов дата создания которых меньше.
    + к этому в коде есть проблема: если в пути с русскими словами стоит 3 и более пробела (к примеру, \Каталог который нужно скачать), то привыполнении bat-ника пишет - "CWD": no such file or dirictory. Кто-нибудь знает как это можно обойти? Сразу говорю, кодировку проверял, сокращение 8-3 не работает, заключение пути в кавычки не помогает.

    Всего записей: 33 | Зарегистр. 24-10-2008 | Отправлено: 01:56 04-06-2010 | Исправлено: barsikline, 01:57 04-06-2010
    mugil_cephalus

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

    Цитата:
    taskkill /f /t - прибил  все же...  

     

    Цитата:
    засада:
    Код:start /b "" cmd.exe /k "pause & exit & %key%"  
    title killme  
    taskkill /f /FI "WINDOWTITLE eq killme"  

    я смотрел в help'e hh ntcmds.chm - там в примерах по синтаксису все taskkill'ы с фильтрами требуют наличия в команде ключа /IM
    типа
    Код:
    taskkill /f /FI "WINDOWTITLE eq killme" /im cmd.exe


    Цитата:
    :timerloop  

    Использование допустимых значений метки  
    Метка может включать пробелы, но не может включать другие разделители, такие как точка с запятой или знак равенства. В команде goto используются только первые восемь знаков метки. Например, следующие метки эквивалентны и рассматриваются как :hithere0:  
     
    :hithere0
     
    :hithere01
     
    :hithere02
    source - hh ntcmds.chm::/goto.htm

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

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

    Цитата:
    Необходимо чтобы с ftp качались все файлы или целиком папка дата которых больше по сравнению с другими.

    Шапка

    Цитата:
    Работа с текстом, датой, и файлами »  


    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:37 04-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