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

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



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

    Цитата:
    надеяюсь только на время сеанса
    да, на время сеанса, но вот chcp в сеансе перестают влиять на кодировку вывода того же dir>file. Хотя кодировка ввода по прежнему переключается.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:52 12-07-2010 | Исправлено: wolf0425, 13:57 12-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возникло сразу 2 вопроса. В переменной содержатся имена файлов через пробел. Можно ли вывод переменной

    Код:
    For %%A In (%Var%) Do Echo %%A

    отфильтровать в алфавитном порядке? "Sort", похоже не поможет.
    Второе (и самое важное): есть ли возможность работать с тремя вложенными For (ну, с двумя - понятно, в одном прописные буквы, в другом - строчные)? Если конкретно, имеется переменная %HDDPartitions%, в которой через пробел находятся разделы HDD: "C: D: E: ...", её собирался использовать в первом цикле (%%A). Во втором через "For /F "Tokens=* UseBackQ" %%a In (`Dir /A-D /B /O:N %%A\*.*`) Do ..." должны были выводиться файлы, находящиеся в корнях этих разделов. И имеется переменная %NonErasingFiles%, в которой через пробел находятся имена файлов, не подлежащих удалению, все остальные должны удаляться. Но для этого потребуется 3-й цикл (в нём будет выставляться флаг в случае совпадения). И я не совсем понимаю, как его организовать, дабы не произошло конфликта.

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



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

    Цитата:
    И я не совсем понимаю, как его организовать, дабы не произошло конфликта.
    кроме переменных %%a и %%А есть ещё 50 свободных буковок и 10 циферок, для организиции цикла с одной переменной - используй любую незанятую. цикл занимает обычно одну переменную, а не 26. Впрочем сколько занимает for /f  - задается в команде, там часто более одной бывает требуется.

    Код:
    for %%a in ( 1 2 3 ) do for %%b in ( 4,5,6 ) do for %%c in ( 7;8;9 ) do echo.%%a%%b%%c

    а можно вообще цикл в подпрограмму вынести, там можно заново 62 переменных цикла использовать - они туда не передаются.
     

    Цитата:
    отфильтровать в алфавитном порядке? "Sort", похоже не поможет.  
    через файл сделай.
    или через массив переменных, там сортировка халявная:
    Код:
    set var=3 2 1
    setlocal
    For %%A In ( %var% ) Do set _var_%%A=%%A
    for /f "tokens=1* delims==" %%A in ('set _var_') do echo.%%B
    endlocal

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Со вторым вопросом, кажется, сам разобрался. Во первом цикле %%A, во втором цикле вместо %%a прокатывает %%B. Стал быть строчные буквы остаются вакантными. Сейчас уже нет времени, завтра вернусь к батнику.
     
    Добавлено:

    Цитата:
    кроме переменных %%a и %%А есть ещё 50 свободных буковок и 10 циферок

    Это как? В смысле: циферки-то разве можно использовать?

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



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

    Цитата:
    Это как? В смысле: циферки-то разве можно использовать?
    ну да, какие проблемы?

    Код:
    for %%1 in ( 1 2 3 ) do for %%2 in ( 4,5,6 ) do for %%3 in ( 7;8;9 ) do echo.%%1%%2%%3


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:11 12-07-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    а еременных еще больше...   попробуй... ( у меня работает на win 5.1 ru )

    Код:
    chcp 1251
    ipconfig
    for /f "tokens=1,2" %%э in ('ipconfig') do (
    set "var1=%%~э"
    set "var2=%%~ю"
    )
    set var
    pause

    128 переменных?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:51 13-07-2010 | Исправлено: mugil_cephalus, 10:57 13-07-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mugil_cephalus
    действительно работает но я бы не стал использовать русские имена переменных.
    Кстати, не только так работает, но и так:

    Код:
    set "переменная1=%%~э"
    set "переменная2=%%~ю"

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    в set чего только не "всунешь"...

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

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

    Всего записей: 46 | Зарегистр. 12-07-2010 | Отправлено: 17:57 13-07-2010 | Исправлено: evle, 19:51 14-07-2010
    errone



    TRAKTOR
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Забанят его в конце концов

    Цитата:
    Сообщить модератору
    нажато

    Всего записей: 569 | Зарегистр. 24-06-2007 | Отправлено: 18:31 13-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Интереса ради полюбопытствовал в инете разницу между cmd и bat. И случайно на одном левом форуме ( http://www.sql.ru/forum/actualthread.aspx?bid=24&tid=423401&hl=cmd+bat ) узнал, что в cmd-скриптах можно также использовать REXX. Ну, REXX я не знаю, но всё равно интересно. Такой вопрос: что, cmd-скрипты, содержащие кроме "чистой батаники" ещё и REXX, Cmd.exe сам умеет обрабатывать, или дополнительное ПО требуется?
     
    Добавлено:
    Всё, вопрос снят (нужно было дочитать в том форуме до конца): REXX не для Виндузы. Точнее, не для виндузных cmd-скриптов.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а у меня что то нет файла %systemroot%\fonts\terminal.fon  
    тогда где же сидит точечный шрифт консоли ?

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Так в свойствах консоли есть же вкладка "Font". В ней указано, какой шрифт текуще используется.
     
    Добавлено:
    Хм... У меня "Raster Fonts" указано, но на какой конкретно шрифт это указывает, я тоже не знаю.
     
    Добавлено:
    Но не "Terminal". В блокноте выбрал "Terminal", не похоже ни разу.

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

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

    Цитата:
    Так в свойствах консоли есть же вкладка "Font".  

    у меня указан - терминал ( win 5.1 ru )  
    хочу найти физический файл
    %systemroot%\fonts\lucon.ttf ( люсида )  есть  
    p.s.
    наверное только wolf0425 знает ( из gsp )  

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 08:07 14-07-2010 | Исправлено: mugil_cephalus, 08:21 14-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Все, которые начинаются на cga и ega, стандартный виндузный просмотрщик фонтов называет "Terminal". Может и ещё какие.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 08:25 14-07-2010
    mugil_cephalus

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

    Цитата:
    Все, которые начинаются на cga и ega,

    у меня far показывает много cga*.fon и ega*.fon , но как найти terminal.fon ( у него явно другое ntfs-название )
     
    Добавлено:
    все равно исходники win открывают ( http://top.rbc.ru/society/07/07/2010/432324.shtml ) может кто подскажет....  

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Поскажите, пожалуйста, как посредством WMIC получить удобоваримый список установленных принтеров для последующей обработки в For? Я пробовал просто "WMIC Printer", "WMIC Printer Get", "WMIC Printer List", но в ответ - совершенное безобразие, кое фиг обработаешь.
    P. S. Я знаю, что в 2K3 имеются системные VBS-скрипты для работы с принтерами, но мне их не хочется использовать.
     
    Добавлено:
    Всё, вопрос снят. Углубился в WMI (что полезно во всех отношениях) и быстро (основываясь на имеющихся шаблонах) нашёл то, что нужно:
    "WMIC Path Win32_Printer Get Name".

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А вот как удалить принтер, зная его имя, так и не разобрался. Может кто подскажет?
    "WMIC Printer Delete /NoInteractive" удаляет все принтеры, что неприемлимо.

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Написал тут батник некий, в начале стоит
    setlocal ENABLEDELAYEDEXPANSION
    После этого оператора идет присвоение переменной пути к файлу.  
    Если в пути файла встречается восклицательный знак, то он отбрасывается, естественно это вызывает ошибки в дальнейшей обработке. Как экранировать ! в set?  
    Пробовал и двойной ввод и ^ и / - не помогает, отказаться от использования ! в путях тоже не вариант - уже много чего прикручено к такой конфигурации.
     
    Добавлено:
    пока придумал только такой обходной маневр:

    Код:
    @echo off
    set vkl=!
    setlocal enabledelayedexpansion
    set vv=gg!vkl!gg
    echo !vv!
     

    Но это реальный изврат.
    ЗЫ: блин, опять форум глючит.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:29 14-07-2010
    Maqentaer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    заключай присвоение в кавычки
    set "asd=a!&fds'dasd"

    Всего записей: 71 | Зарегистр. 18-05-2008 | Отправлено: 19:32 14-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