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

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

    Код:
    rd /q/s "f:\name1\name2" 2>nul
    for /f "delims=" %%a in (' dir /b/s/a:d "f:\name1\name2" ') do rd /q /s "%%~fa"
     
    сразу скажу - будет проблема когда "f:\name1\name2" существует но ее удалить не удается
     
    Добавлено:
    den06051979
    Цитата:
    а надо чтобы и параметры /play /fullscreen подхватил тоже.  

    попробуй переставить их в начало

    Код:
    start /B /NORMAL "C:\Program Files\SAM CoDeC Pack\Players\MPCHC\mpc-hc.exe"  /play /fullscreen  "D:\TV+\10.2009\10.2009_disk_D.m3u"

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:48 27-01-2010 | Исправлено: wolf0425, 16:58 27-01-2010
    Maikl_relax

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    не все так просто ))))  
    f:\name1 это статическое имя ктрое я могу задать в батнике, а вот name2 - шаблон!
    то есть рекурсивно из  
    f:\name1
    нужно удалить
    f:\name1\1\dir
    f:\name1\2\dir
    f:\name1\3\dir
    и т.д.
    f:\name1\1\1\dir
    f:\name1\2\1\dir
    и т.д.
     
    Что бы было проще понять- есть N Баз 1С 7.7, лежат в f:\name1 Из каждой базы нужно снести NEW_STRU вместе с одрежимым. Я конечно могу скопипастить все пути, но это уже не автоматизация =)  А N>100 ^)
     

    Всего записей: 8 | Зарегистр. 27-01-2010 | Отправлено: 17:06 27-01-2010
    wolf0425



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

    Цитата:
    wolf0425
    не все так просто ))))  
    f:\name1 это статическое имя ктрое я могу задать в батнике, а вот name2 - шаблон!
    то есть рекурсивно из  
    f:\name1
    нужно удалить
    f:\name1\1\dir
    f:\name1\2\dir
    f:\name1\3\dir  
    дада, именно оттуда и удалит. ты проверь
     
    в dir /b/s/a:d "f:\name1\name2"
    f:\name1\ - это путь откуда начать сканировать с подкаталогами ( /s )
     
    а name2 - это маска подкаталога (/a:d) что надо найти  
    по подкаталогам указанного пути f:\name1\
     
    но вот если есть "f:\name1\name2\" - то просто показывает каталоги из него, а не все каталоги name2\ из подкаталогов "f:\name1\" (как это обойти - приудмали ниже)

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:04 27-01-2010 | Исправлено: wolf0425, 19:54 27-01-2010
    Kirillhome



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

    Цитата:

    Код:
    for /f "delims=" %%a in (' dir /b/s/a:d "f:\name1\name2" ') do rd /q /s "%%~fa"  

    сразу скажу - будет проблема когда "f:\name1\name2" существует но ее удалить не удается  

    А вот так - не будет

    Код:
    for /f "delims=" %%a in (' dir /b/s/a:d "f:\name1\*name2" ') do (if "%%~na"=="name2" (echo "%%~fa"))

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 18:38 27-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать, чтобы для
    Код:
    if [not] Строка1==Строка2 command
    выводилось на экран только command?

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 19:05 27-01-2010
    wolf0425



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

    Цитата:
    А вот так - не будет  
    а, неплохое решение.
    только все же do (if /i "%%~nxa"=="name2" (echo "%%~fa"))  
     
     
    Добавлено:
    Pacho
    Цитата:
    выводилось на экран только command?
    а зачем тебе вообще что-то чтоб выводилось там? @echo off в начало батника поставь, а где чего надо печатать - печатай сам.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:51 27-01-2010 | Исправлено: wolf0425, 12:56 01-02-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    Вообще-то имелся в виду размер именно диска, а не раздела. Т.е. disk в терминологии diskpart.exe.
    С размером ладно, а как мне при наличии устройства с буквой E (раздел на диске, привод компакт-дисков, флэшка и т.д.) поменять ему букву на какую-нибудь неиспользуемую?
    Можно просто размонтировать, но тогда устройство (например, cdrom) потеряется в системе и монтировать потом придется вручную, поэтому нужно именно поменять букву.

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 20:00 27-01-2010
    BumerangII



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как реализовать?
     
    необходимо проверить наличие в текстовом файле определнной строки.
    Если строки нет - то добавить
    Если строка есть - то перейти к следующему действию
     
    в интерактивном режиме читаю файл
    Код:
    find "10.3.52.36"< %windir%\system32\drivers\etc\hosts

    и на экране вижу результат, если находит или пустую строку, а вот как проверить программно не могу сообразить

    Всего записей: 88 | Зарегистр. 14-12-2005 | Отправлено: 20:06 27-01-2010 | Исправлено: BumerangII, 20:06 27-01-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia монтирование/размонтирование разделов производится командой mountvol  - ей наличие букв до нее совершенно фиолетово.
    А для доступа системы к левому диску - отдельная буква ему не нужна тоже.
    Нелевыми дисками являются только диск с системой и диск со свопфайлом.
     
     
    Добавлено:
    BumerangII  

    Код:
    find "10.3.52.36"< %windir%\system32\drivers\etc\hosts && echo Found!


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:10 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Моя проблема более полно описана здесь. Т.о. про mountvol я в курсе. Речь не идет о доступе системы к дискам, речь идет о том, чтобы освободить конкретную букву (E: ) для своих определенных целей, при этом чтобы все диски, доступные пользователю ранее, остались доступны и после.

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 20:16 27-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia
    может поможет
    Команды DiskPart
    online
     
    Подключение отключенного диска или тома, на который установлен фокус.
     
    Синтаксис
    online [noerr]

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:25 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Используя mountvol я могу довольно просто размонтировать что-либо, но как также просто смонтировать обратно? Как я понял, для монтирования надо точно знать некое длинное название устройства (список которых выводится при вызове mountvol без параметров и этот список разный для разных машин), а для этого надо производить какие-то дополнительные телодвижения, и я не знаю как. Если несложно, подскажите, как или хотя бы куда копать.
     
    king_stiven
    Что касается diskpart.exe online, это подходит только для видимых diskpart'у дисков, т.е., скажем, привод компакт-дисков diskpart'ом не выбрать и, соответственно, не смонтировать.
    Простая ситуация. Установили Windows Server 2003 на голый винт PATA. При этом создали два раздела - C: и D:, поэтому DVD-ROM будет висеть на E:. А в инструкции и в скриптах идет привязка к букве E: как к разделу на RAID0. Можно поменять букву, но это глобально проблему не решит, если выбранная буква опять будет кем-то занята.
    Итак, установили ОС, сконфигурили RAID0, далее запустили скрипт, который создаст и отформатирует раздел на RAID0, после чего смонтирует раздел на E:. При этом DVD-ROM или какая-нибудь флэшка, привязанная к этой букве ранее, будет размонтирован(а) и в дальнейшем автоматически монтироваться системой не будет. Что сделает конечный пользователь? Правильно, начнутся вопросы, а куда пропала моя флэшка/DVD-ROM/внешний FireWire-накопитель и т.д. Придется объяснять ему, куда лезть, возможно, направлять по телефону, а это немного не то, что ожидается от автоматизации

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 20:26 27-01-2010 | Исправлено: Ykidia, 20:45 27-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia
    Приведи пример как можно смонтировать с помощью mountvol.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:26 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Получение списка устройств и подключений:

    Код:
    C:\>mountvol
    Создание, удаление и просмотр точек подключения.
     
    MOUNTVOL [<диск>:]<путь> <имя тома>
    MOUNTVOL [<диск>:]<путь> /D
    MOUNTVOL [<диск>:]<путь> /L
     
       <путь>       Существующая папка NTFS, в которой будет
                    располагаться точка подключения.
       <имя тома>   Имя подключаемого тома.
     
       /D           Удаление точки подключения тома из заданной папки.
       /L           Вывод списка имен подключенных томов для заданной папки.
     
    Возможные значения имени тома вместе с текущими точками подключения:
     
        \\?\Volume{b0132466-b5ab-11dd-8f92-806d6172696f}\
            C:\
     
        \\?\Volume{09717294-cd09-11dd-b053-806d6172696f}\
            E:\
     
        \\?\Volume{b0132465-b5ab-11dd-8f92-806d6172696f}\
            Z:\
     
        \\?\Volume{b0132464-b5ab-11dd-8f92-806d6172696f}\
            A:\

     
    Удаление точки подключения (размонтирование):

    Код:
    mountvol Z: /D

     
    Монтирование:

    Код:
    mountvol Z: \\?\Volume{b0132465-b5ab-11dd-8f92-806d6172696f}

     
    Соответственно, для смены буквы тому же DVD-ROM, как в моем примере, нужно как-то в переменную "загнать" имя тома с буквой Z:\, затем удалить точку подключения Z:\ и наконец смонтировать DVD-ROM на новую букву, передав переменную с именем тома команде mountvol.
    Но пока никак не получается получить в переменной имя тома с заданной буквой...
     
    Добавлено:
    Что-то я туплю под вечер. Написано же, что  
    /L           Вывод списка имен подключенных томов для заданной папки.
    Вот и ответ на один из моих вопросов...

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 21:36 27-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia
    mountvol Z: \\?\Volume{b0132465-b5ab-11dd-8f92-806d6172696f}
    у мен не сработал с моим GUID

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:50 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как проявилось то, что не сработал?

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 21:54 27-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ykidia
    может поможет сначала переназначить с E на лругую букву
    Команды DiskPart  
    assign
     
    Назначение буквы диска или точки подключения тому, имеющему фокус. Если буква диска или точка подключения не указана, используется следующая доступная буква. Если буква диска или точка подключения уже используется, возникает ошибка.
     
    Команду assign можно использовать для смены буквы диска, связанной со съемным диском.
     
    Нельзя назначать буквы дисков системным томам, загрузочным томам или томам, содержащим файл подкачки. Кроме того, буква диска не может быть назначена разделу ИВТ или разделу GPT, отличному от раздела MSDATA.
    Синтаксис
    assign [{letter=d|mount=путь}] [noerr]
     
     
    Добавлено:

    Цитата:
    А как проявилось то, что не сработал?

    Параметр задан неверно.
     
    Добавлено:
    Ykidia
    assign letter=Z
    сработало,
     то есть сначала делай проверку на зантость E и в случае зантости переназначь.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:02 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    diskpart не работает у меня с DVD-ROM, поэтому diskpart отпадает.
     

    Цитата:
    Параметр задан неверно.

    Такое происходит в нескольких случаях: 1) если ошибка в имени тома; 2) если указанный том уже смонтирован (кажется, у тебя этот случай)

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 22:12 27-01-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ykidia
    Переназначение (если надо) буквы.
     

    Код:
     
    @echo off
    set Old_Vol="No"
    Set L_Free="c:\"
    rem Нашли последнюю свободную букву (L_Free)
    for %%i in (d e f g h i j k l m n o p q r s t u v w x y z) do (
        mountvol %%i:\ /L>nul||(set L_Free=%%i:\)
        )
     
    if L_Free=="c:\" (
       echo No Free!!!
       Goto :EOF
    )
    rem Проверили, если есть что-то на E:\ - то присвоили это в Old_Vol
    mountvol E:\ /L>nul&&FOR /F %%a in ('mountvol E:\ /L') do (set "Old_Vol=%%a")
     
    if NOT Old_Vol=="No" (
    rem Размонтрируем E:
        mountvol.exe E: /D
        mountvol.exe /R  
    rem Смонтируем на новом месте
        mountvol %L_Free% %Old_Vol%
        )
     
    rem ну, и всё, что там далее - связанное со скриптом...
     

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 22:14 27-01-2010
    Ykidia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    О! Как раз то, что надо, спасибо!

    Всего записей: 242 | Зарегистр. 03-03-2005 | Отправлено: 22:17 27-01-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