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

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



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

    Цитата:
    В одном из постов выше я упомянал о PowerShell

    Здесь оффтоп. Топ же здесь: http://forum.ru-board.com/topic.cgi?forum=62&active=15&topic=7221#1

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:30 30-05-2010
    ComradG



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

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 21:48 30-05-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пользуюсь безо всяких проблем notepad2. там легко за пару секунд можно изменить ОЕМ - ANSI
    Главный вопрос был не в этом, а в том, как сделать автоответ ДА на команду set /p

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 22:04 30-05-2010
    TTTT555

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть такой код:

    Код:
    SET IP=C:\ip.txt                              
    ipconfig|FIND "172" > %IP%
    C:\MyProgram.exe C:\MyScript.lua -ip %IP%
     

    Задача состоит в том чтобы запустить свой скрипт на выполнение с параметром равным IP-адресу, начинающемуся на 172.
    В процессе выполнения батника, в "ip.txt" записывается текст вида:
       IPv4-адрес. . . . . . . . . . . . : 172.45.18.30,  
    но последняя строка автоматически заменяется на:
    C:\MyProgram.exe C:\MyScript.lua -ip C:\ip.txt
     
    Подскажите пожалуйста, как можно обойтись без записи переменной в текстовый файл, и чтобы там был чисто IP-адрес без лишнего мусора, ну и в конце концов чтобы он нормально вписывался в качестве параметра к скрипту.

    Всего записей: 23 | Зарегистр. 31-05-2009 | Отправлено: 22:58 30-05-2010
    01MDM



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

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

    Попробуй такой вариант:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4-.*:.172\."') do set "ip=%%i"
     
    C:\MyProgram.exe C:\MyScript.lua -ip %ip%  
     

     
     
    Добавлено:
    SLIDER999

    Цитата:
    Теперь нужно сделать автоответ через Х секунд

    Вот если бы win-7, то там из коробки choice.exe

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:22 30-05-2010
    TTTT555

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

    Цитата:
    Попробуй такой вариант:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4-.*:.172\."') do set "ip=%%i"
     
    C:\MyProgram.exe C:\MyScript.lua -ip %ip%  
     

     
    Благодарю, работает.

    Всего записей: 23 | Зарегистр. 31-05-2009 | Отправлено: 23:40 30-05-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=23&limit=1&m=1#1
    это уже было -
    Цитата:
    Возможно ли с помощью батника создать ярлык к файлу?  
     
    - http://forum.ru-board.com/topic.cgi?forum=62&topic=6156#20
    а вообще ярлыки делает консольная утилита shortcut.exe (кажется, входит в какой-то ресурс кит)

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 07:22 31-05-2010 | Исправлено: mugil_cephalus, 07:27 31-05-2010
    igor_andreev

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

    Цитата:
    как бы в sed  сделать скрипт на удаление группы строк:  
    первая строка группы содержит string1  
    последняя строка группы является ближайшей содержащей string2

    Намедни прямо противоположную задачу(извлечь параграф из текста) делал так:

    Код:

    type name.txt | sed -e "1,/string1/d"  | sed -e "/string2/,$d"

    Удалил то есть всё от первой строки до string1 и от string2 до конца текста.
     
    Добавлено:
    Вообще параграф удаляется так:

    Код:

    sed "/string1/,/string2/d"

    А в гугле где-то видел сложные примеры с sed, как несколько параграфов из текста удалять(яваскрипты из хтмл например), захватывая по строчке сверху и снизу от string(или наоборот, пропуская строчки со string). Погугли по словам "sed + remove paragraph" или "sed + delete paragraph"

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 11:12 31-05-2010 | Исправлено: igor_andreev, 11:34 31-05-2010
    wolf0425



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

    Цитата:
    Намедни прямо противоположную задачу(извлечь параграф из текста) делал так:
    Удалил то есть всё от первой строки до string1 и от string2 до конца текста.

    инвертировать чего-то не получается: sed -r -e "/string1/,/strind2/ d" удаляет строки начиная с string1 даже если strind2 в тексте нету. наверно чего то туплю и оно как-то просто делается.
     
    кстати, в твоем случае второй запуск sed можно было не делать, а просто первому sed прописать две команды:
    type name.txt | sed -e "1,/string1/d" -e "/string2/,$d"  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:42 31-05-2010 | Исправлено: wolf0425, 11:43 31-05-2010
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    А если проверку наличия string1 и string2 попробовать сделать перед запуском sed?
    Типа find "string1" && find "string2" && sed ...
     
    Добавлено:
    В faq еще глянь на 4.11, 4.12, 4.13. Особенно 4.11, там скрипт файл правда нужно отдельным файлом писать(sed -f script.sed)
    http://www.faqs.org/faqs/editor-faq/sed/
    может получится применить в твоем случае?

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 11:59 31-05-2010 | Исправлено: igor_andreev, 12:18 31-05-2010
    wolf0425



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

    Цитата:
    А если проверку наличия string1 и string2 попробовать сделать перед запуском sed?  

    толку то, я заранее знаю что обе подстроки есть - только в случае когда  string2  идет раньше string1  удаляться ничего не должно
     
    вся проблема в том, что /start/,/end/ - селектирует строки до /end/  ИЛИ ДО КОНЦА ФАЙЛА.
    4.11 страдает совершенно тем же, а моего куцего понимания языка недостаточно чтоб прикрутить проверку на присутствие в блоке строки  /end/ или отсутствие строки $ перед удалением строк.
     
     
    Добавлено:

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:48 31-05-2010 | Исправлено: wolf0425, 14:54 31-05-2010
    sjsash

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые форумчане подскажите как с помощью bat-ника узнать есть ли в папке ( //server/XML/ ) файлы ( *.xml ) с атрибутом "архивный"? Если нет вывести сообщение "мол нет таких", если есть скопировать в папку ( D:\Import_XML\ ).
    На сервере должны быть файлы *.xml накопленые за последние 3 месяца и нужно понять есть ли новые (с атриб. архивный) после копирования атриб. архивный снимается и файлы остаются на сервере как резервные копии.
     
    Как проверить есть ли файлы *.xml понятно
    Код:
     if exist "//server/XML/*.xml"  
    а как узнать есть ли с атрибутом архивный ?

    Всего записей: 14 | Зарегистр. 13-11-2009 | Отправлено: 14:54 31-05-2010 | Исправлено: sjsash, 14:56 31-05-2010
    wolf0425



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

    Цитата:
    как с помощью bat-ника узнать есть ли в папке ( //server/XML/ ) файлы ( *.xml ) с атрибутом "архивный"? Е

    наверно так:

    Код:
    dir /b /aa-d //server/XML/*.xml 1>nul 2>nul && (xcopy /y /m  //server/XML/*.xml  D:\Import_XML\) || (echo Files not found)
    чето расслабился - раз несколько ключи правил, пока все вспомнил

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:02 31-05-2010 | Исправлено: wolf0425, 15:11 31-05-2010
    sjsash

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Вроде оно, но выводит сообщение хоть есть, хоть нет атрибута. И еще как выполнить условие если есть - то
    Код:
     xcopy "//server/XML/*.xml" "D:\Import_XML\*.xml" /z /a /v /q  
    и если нет - то
    Код:
     :nofile  

    Всего записей: 14 | Зарегистр. 13-11-2009 | Отправлено: 15:31 31-05-2010
    wolf0425



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

    Цитата:
    выводит сообщение хоть есть, хоть нет атрибута.
    а странно, не должно бы.
    перепиши на простое ветвление, раз с однострочностью проблемы
    dir /b /aa-d //server/XML/*.xml 1>nul 2>nul && goto :exist
     

    Цитата:
    И еще как выполнить условие если есть - то  
    ключик /a тебе там точно нужен? с ним то атрибут то не снимется

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:36 31-05-2010 | Исправлено: wolf0425, 15:38 31-05-2010
    sjsash

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

    Код:
    dir /b /aa-d //server/XML/*.xml 1>nul 2>nul && (xcopy /y /m  //server/XML/*.xml  D:\Import_XML\) || (echo Files not found)

     
    работает СПАСИБО!!!  
     

    Цитата:
    ключик /a тебе там точно нужен? с ним то атрибут то не снимется

    нужен я после сравнения файлов
    Код:
     Comp "//server/XML/*.xml" "D:\Import_XML\*.xml"  
    снимаю атрибут
    Код:
     attrib -a "//server/XML/*.xml"  

     
     
     
     
     
    Добавлено:
     
    Подскажите кто знает как убрать запрос "сравнить другие файлы" после выполнения команды - Comp ? Или может установить автоматический выбор "другие файлы не сравнивать". В справке ниче не нашол.

    Всего записей: 14 | Зарегистр. 13-11-2009 | Отправлено: 15:38 31-05-2010 | Исправлено: sjsash, 17:14 31-05-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sjsash
    Цитата:
    нужен я после сравнения файлов  снимаю атрибут  
    а за время длительной операции сравнения скопированных не может новый файлик на сервере добавиться?  
    имеет смысл копирование/проверку/снятие аттрибута сделать пофайловым а не групповым (for /f "delims=" %%a ('dir ...  )
     
    Добавлено:

    Цитата:
    как убрать запрос "сравнить другие файлы" после выполнения команды - Comp ?

    использовать не Comp, а fc  - не вариант?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:07 31-05-2010 | Исправлено: wolf0425, 17:13 31-05-2010
    sjsash

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

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

    Та нет, файлы автоматически не появляются. Юзер экспортирует с 1С на сервер раз в месяц, а второй юзер bat-ником тянет их к себе и импортирует в другую прогу.
     
    Добавлено:

    Цитата:
    использовать не Comp, а fc  - не вариант?

    может и вариант не знал про такой оператор, посмотрим...
     
    Все отлично работает и спасибо за подсказаный оператор fc
     
     
    Вопрос по оператору fc - есть ли у него errorlevel ( я так думаю что есть ) и описание?
    И всеже хочется узнать - как задать автоматический вариант ответа на вопросы bat-ника може подскажет кто ?

    Всего записей: 14 | Зарегистр. 13-11-2009 | Отправлено: 17:23 31-05-2010 | Исправлено: sjsash, 18:14 31-05-2010
    king_stiven

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

    Цитата:
    Но всеже хочется узнать - как задать автоматический вариант ответа на вопросы bat-ника може подскажет кто ?

    Типа если при какой нить операции батник спрашивает,y жать или n? Если только перед этой операцией запустить второй батник скрыто из первого, чтоб он сэмулировал нажатие клавиши после паузы, но тут нужны парочка посторонних утилей типа nircmd , hstart или cmdow, sleep желательно.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 18:29 31-05-2010 | Исправлено: king_stiven, 18:32 31-05-2010
    ComradG



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

    Цитата:
    http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=23&limit=1&m=1#1

    Уже читал, но я не про хекс, а системный шелл имел в виду. Кстати, я тут продолжил поиски, и понял, что не все так безнадежно. Будут подробности, свистну.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 18:43 31-05-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