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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    Цитата:
    Ykidia  
    Есть засады:  
    1) mountvoll - не вывел мне информацию о виртуальном приводе (реального - нет, проверить не могу).  
    2) mountvoll - не вывел мне информацию о подмепленном сетевом диске (т.е. net use * \\ресурс\шара - Диск z cейчас подключен, смотрю через mountvoll - нет ничего).

     
    О! Случайно набрел на вот такое:

    Код:
    wmic logicaldisk get name

    У меня вывел список 1) того, что выводит mountvol; 2) того, что выводит net use; 3) того, что выводит subst; 4) того, что не выводит ни mountvol, ни net use, ни subst. Вот результат вывода моих дисков:

    Код:
    C:\>wmic logicaldisk get name
    Name
    A:
    C:
    D:
    E:
    L:
    M:
    P:
    Z:

    Комментарии:
    A: - физический дисковод 3,5 (показывается mountvol, также в реестре);
    C: - системный раздел (показывается mountvol, также в реестре);
    D: - виртуальный привод, созданный UltraISO;
    E: - еще один раздел на том же винчестере, что и системный (показывается mountvol, также в реестре);
    L: - подключенная папка \\Server\L (показывается net use);
    M: - подключенная папка \\Server\M (показывается net use);
    P: - отображенный локальный путь E:\Project (показывается subst);
    Z: - физический привод CD/DVD (показывается mountvol, также в реестре).
     
    Если выяснится, что wmic можно выполнять операции переназначения, будет здорово и немного обидно, ведь батничек для своей задачи я уже накатал, причем задача по ходу ее решения видоизменилась.

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 19:12 04-02-2010 | Исправлено: Ykidia, 19:20 04-02-2010
    wolf0425



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

    Цитата:
    Как сделать что бы файлы *.docx  переименовывались в *.bak, а *.doc в *.buk  

    последовательно - сначала for для первого, потом для второго.
    сам поправишь, тренируйся.

    Цитата:
    И скрыть само окно.

    cmdow.exe @ /hid
    cmdow ищешь в шапке темы
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:08 04-02-2010
    VladikoVoron

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 неа. Забыл уточнить, что в папке update постоянно находятся файлы. A xcopy смотрит не новее ли файлы в update, если да, то обновляет  c:\prog.  
     
    В этом деле опыта нет, но думаю может как-то так:

    Код:
     xcopy e:\update\* c:\prog\ /S /D /V /K /Y  | find "скопировано: 0" 1  
    if errorlevel 1  goto :_noupdate  


    Всего записей: 11 | Зарегистр. 05-12-2007 | Отправлено: 20:21 04-02-2010
    wolf0425



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

    Цитата:
    В этом деле опыта нет, но думаю может как-то так:

    Код:
     xcopy e:\update\* c:\prog\ /S /D /V /K /Y  | find "скопировано: 0" 1  
    if errorlevel 1  goto :_noupdate  

    мысль здравая, но 1  там у тебя что делает, имя файла изображает? errorlevel вшит в код find

    Код:
    xcopy /S /D /V /K /Y  e:\update\* c:\prog\ | findstr /b /c:"0 File(s) copied" && goto :_noupdate
    Ну или сообщение русского xcopy впишешь сам

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:41 04-02-2010 | Исправлено: wolf0425, 22:16 04-02-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще вопрос. Вот на этой картинке наглядно показано то, что я хочу сделать батником: 1) включить кэш записи и 2) включить повышенную производительность. В моем случае название диска/тома Volume0 (вместо Hitachi HDS721075KLA SCSI Disk Device).
    Нашел ключи реестра, отвечающие за это: CacheIsPowerProtected и UserWriteCacheSetting. Находятся в ветке [HKLM\SYSTEM\CurrentControlSet\Enum\IDE\DiskVolume01.0.00__\4&36887771&0&0.0.0\DeviceParameters\Disk]. Однако их изменение вступает в силу только после перезагрузки, а как бы в батнике сделать так, чтобы без перезагрузки?

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 21:44 04-02-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ykidia
    Сделать изменения в реестре, отключить и подключить заново диск - не поможет?
     
    Добавлено:
    bredonosec

    Цитата:
    вроде один раз получалось, но повторные проверки нифига не дали - не пишется, и точно так же не находит ((  

    Так написало же ошибку:

    Цитата:
    c:\[..]\My Documents\Sys>net use m: \\DD_PEPR\c$ [pass] /user:[domain\admin]   || goto NO_CONN
    System error 85 has occurred.
     
    The local device name is already in use.

    Т.е. имя m: - уже используется.
    Если надо использовать строго это имя - то сначала вставь

    Код:
    net use m: /DELETE

     

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 22:52 04-02-2010
    bredonosec



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    ок, спробую на раоте..  
     
     
    а вообще не давая имени ресурсу, через  
    net use smth
    можно?  
     
    upd
    да, именно этого и не хватало.  
    Теперь вопрос, как можно комменты класть в ту же строку?  
    Видел вариант с комбинированием строк:
     
    command /parameter &REM [comments]
     
    и видел такой вариант.
    command /parameter ;[comments]
     
    насчет первого, как понял, работает, а второй корректен?

    Всего записей: 16260 | Зарегистр. 13-02-2003 | Отправлено: 05:58 05-02-2010 | Исправлено: bredonosec, 10:09 05-02-2010
    wolf0425



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

    Цитата:
    насчет первого, как понял, работает, а второй корректен?  
    а второй некорректен - прокатывает только с теми command которым наплевать на непонятные ключи.
    более короткий вариант первого:
    command /parameter &: комменатрий: метки не в начале строки - игнорируются

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:14 05-02-2010
    bredonosec



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

    Цитата:
    command /parameter &: комменатрий:  

    то есть, двоеточие?  
    хм.. где-то читал, что комменты через двоеточия могут кидать ошибки..  
    а, вот -  
    http://www.robvanderwoude.com/comments.php
    и еще где-то..  


    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16260 | Зарегистр. 13-02-2003 | Отправлено: 15:55 05-02-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    Вряд ли, хотя я не успел попробовать, а нашел dskcache.exe от MS, который свободно не раздается, а только через службу поддержки (ну, это нам не помеха ). Можно выполнить, к примеру,
    Код:
    dskcache.exe +p +w E:

    и побежать смотреть, установились ли галочки в дополнительных свойствах того дискового устройства, на котором находится раздел под буквой E:
    Потом выполнить
    Код:
    dskcache.exe -p -w E:

    и убедиться, что обе галочки сбросились. И т.д.
     
    P.S. С трудом нашел данный файл, отковырял где-то с помощью мамонта (mmnt.ru/int/). Если надо кому, пишите, вышлю. Хотя версия dskcache.exe кажется староватой (1.0), у меня в Windows Server 2003 SP2 на томе RAID он отрабатывает как надо.

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 16:55 05-02-2010
    wolf0425



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

    Цитата:
    хм.. где-то читал, что комменты через двоеточия могут кидать ошибки..  
    а, вот -  
    http://www.robvanderwoude.com/comments.php
    и еще где-то..
    ну, и читаем: depite all, there is nothing wrong with using double colons for comments as long as you understand the limitations
     
    основное ограничение - внутри блоков () использовать нельзя, в отличие от rem.  
    Что совершенно понятно, imho

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

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите , как парсить файл (точнее - строку)
     
    есть файл, содержащий строку (разделитель = ,):
     
    первый второй, еще один, еще как
     
    батник должен выдать:
     
    первый второй
    еще один
    еще как
     
    PS
    Пробовал с For /F, но с чем-то накосячил - получаю только первую строку.

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 20:04 07-02-2010
    wolf0425



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

    Код:
    for /f "tokens=1,2* delims=," %%a in ( file.txt ) do (
        echo %%a
        echo %%b
        echo %%c
    )

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как организовать простейший цикл for...next?
    Мне нужно сделать так:
    Код:
    for i=1 to n
    start /wait prog.exe
    next
    т.е. чтобы программка выполнялась n раз, но ждала своего завершения перед рестартом.
    Туплю я...

    ----------
    god give_health give_ammo give_armor noclip notarget jumpheight 128 timescale 25 - В.Пелевин, "t" (2009)

    Всего записей: 2317 | Зарегистр. 11-12-2006 | Отправлено: 01:58 08-02-2010
    wolf0425



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

    Цитата:
    Туплю я...
    а самосоятельно прочитать for /? - никак нельзя?
    for /L %%i in (1,1,100) do start "" /w prog.exe

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 06:38 08-02-2010
    alexandrExt

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа эксперты, подскажите пожалуйста, как можно решить такую задачу:
    Есть N-ое количество обновлений для windows. Надо их устанавливать в определенном порядке. Можно ли и, если можно, то как сделать следующее:
    1. создать файл со списком обновлений в формате: kb***** - без указания полного имени файла;
    2. Организовать проверку установки - установлено данное обновление или нет;
    3. Если не установлено, то установить, если установлено - пропустить.
     
    Желательно со счетчиком (X установлено из Y).
    Предусматривается обобщенный вариант потому, что обновления хотелось бы так устанавливать в Windows *** Ru и Eng.
     

    Всего записей: 1 | Зарегистр. 08-02-2010 | Отправлено: 08:10 08-02-2010
    slech



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

    Цитата:
     
    set arcdir=c:\progra~1\7-Zip
    set arcprog=7z.exe
    ::
    set m=06
    set y=08
    ::
    %arcdir%\%arcprog% a -t7z IIS_Logs_20%y%%m% ex%y%%m%*.log
    del ex%y%%m%*.log
    pause
     

    подскажите пожалуйста как пробежаться в цикле по m=01-12 ?
    спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 10:42 08-02-2010 | Исправлено: slech, 10:42 08-02-2010
    Tase4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите составить батник. А то я что-то совсем запуталась
     
    Задача такая в каталоге хранятся файлы типа  
    fin-backup-100203-2.nbk
    fin-backup-100204-2.nbk
    fin-backup-100205-2.nbk
    fin-backup-100206-2.nbk
    Нужно удалить старые файлы при этом ограничиваем количество хранимых файлов 3 штуками. То есть если в каталоге больше 3-х файлов с именами тип *-2.nbk удаляем старые и оставляем тока три последних.
     Я сама в корень запуталась. Помогите написать батничек.

    Всего записей: 6 | Зарегистр. 04-12-2009 | Отправлено: 12:29 08-02-2010
    wolf0425



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

    Цитата:
    как пробежаться в цикле по m=01-12 ?  
    проще вместо m сразу переменную цикла вставлять:

    Код:
    set y=08
    ::  
    for %%m in ( 01 02 03 04 05 06 07 08  09 10 11 12 ) do (
        %arcdir%\%arcprog% a -t7z IIS_Logs_20%y%%%m ex%y%%%m*.log
        del ex%y%%%m.log  
    )

     
    Tase4ka
    Цитата:
    То есть если в каталоге больше 3-х файлов с именами тип *-2.nbk удаляем старые и оставляем тока три последних.
     Я сама в корень запуталась. Помогите написать батничек.
    удаление по дате модификации всех файлов, удовлетворяющих маске - кроме 3 самых свежих
    Код:
    @echo off
    setlocal enabledelayedexpansion
    set count=0
    for /f "delims=" %%a in (' dir /b /a-d /o-d *-2.nbk ') do set /a count += 1 & if !count! gtr 3 del /y "%%a"

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:55 08-02-2010 | Исправлено: wolf0425, 13:09 08-02-2010
    BagaBaga

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

    Цитата:
    [/q]
    [q]BagaBaga
     
    Код:
    for /f "tokens=1,2* delims=," %%a in ( file.txt ) do (
        echo %%a
        echo %%b
        echo %%c
    )
     

     
    Вероятно, я не правильно выразился. Количество элементов в строке (в файле) не известно.  Т.е. в случае 3х Ваш код работает. В случае 4х и более - нет

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 13:13 08-02-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