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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4

Модерирует : KLASS, IFkO

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах
(часть 1, часть 2, часть 3)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR
.
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    Exilim



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите плз как переименовать сетевое подключение при помощи bat файла? Например "Подключение по локальной сети" переименовать в "LAN".

    Всего записей: 110 | Зарегистр. 12-08-2005 | Отправлено: 12:58 07-12-2007
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set max=0
    set min=999
     
    for /f "tokens=3" %%i in (log.txt) do (call:check %%i)
     
    :: Особо не тестировал--------------------------
    set /a mid=((max+min)%%2)+((max+min)/2)
    ::----------------------------------------------------
     
    for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%max%\>" "log.txt"') do call:linemax %%i
    for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%min%\>" "log.txt"') do call:linemin %%i
    for /f "tokens=1 delims=:" %%i in ('findstr /N "\<%mid%\>" "log.txt"') do call:linemid %%i
     
    echo MAX %max% on lines: %linemax%
    echo MID %mid% on lines: %linemid%
    echo MIN %min% on lines: %linemin%
    goto:eof
     
    :check
    if %1 geq %max% set max=%1
    if %1 leq %min% set min=%1
    goto:eof
     
    :linemax
    set "linemax=%linemax% %1"
    goto:eof
     
    :linemin
    set "linemin=%linemin% %1"
    goto:eof
     
    :linemid
    set "linemid=%linemid% %1"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:29 07-12-2007 | Исправлено: 01MDM, 15:06 07-12-2007
    crazy_dead

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Огромное спасибище!
    А не подскажешь, где почитать про организацию циклов в батниках и про вот это:
    >nul 2>nul &&  
     
    ЗЫ
    немного неправильно поставил задачку: копирнуть надо не в найденный каталог, как сейчас, а во все его подкаталоги. Это возможно?

    Всего записей: 22 | Зарегистр. 29-09-2005 | Отправлено: 13:53 07-12-2007 | Исправлено: crazy_dead, 14:04 07-12-2007
    kotLeon

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые участники форума подскажите пожалуста есть ли команда для выхода пользователя из профиля, если есть то как она пишется, и можно ли её использовать по сети.
    Спасибо.

    Всего записей: 6 | Зарегистр. 03-12-2007 | Отправлено: 14:23 07-12-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilyansk
    Спасибо - немного подправил код - и все заработало как надо!
    Все OK!
     
     
    01MDM
    Тоже работает все, кроме linemax и linemin
    А что это значит:
     
    set "linemin=%linemin% %1"  
     
    ?

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 14:45 07-12-2007
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    kotLeon
    logoff?

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 14:46 07-12-2007
    01MDM



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

    Код:
     
    @echo off
    set "Docs=C:\Documents and Settings"
    set "file=file.cfg"
    set "folder=FolderName"
     
    for /d %%i in ("%Docs%\*") do (
        dir "%%i\%folder%" 1>nul 2>&1 && call:_copy "%%i\%folder%"
    )
    goto:eof
     
    :_copy
    for /f "tokens=*" %%i in ('dir /b /s /a:d %1') do copy %file% "%%i"
     

     

    Цитата:
    А не подскажешь, где почитать про организацию циклов в батниках и про вот это:
    >nul 2>nul &&  

    Не буду оригинальным - во встроенной справке For /?, в "шапке", в \Windows\Help\ntcmds.chm
     
     
     
     
     
     
    Добавлено:
    SapSat

    Цитата:
    А что это значит:
     
    set "linemin=%linemin% %1"  

     
    определяет номера строк где есть мин и макс значения, добавляет значение. У меня работает, но я использовал только твой кусок из лога.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:48 07-12-2007
    kotLeon

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vu1tur
    Возможно ли применить команду logoff по сети для удаленного компа, как написать такую команду?
    Спасибо.

    Всего записей: 6 | Зарегистр. 03-12-2007 | Отправлено: 15:03 07-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    Последнюю метку исправь с :linemin на :linemid
    Должен быть вот такой вывод после выполнения

    Код:
     
    MAX 133 on lines:  1 16
    MID 124 on lines:  7
    MIN 115 on lines:  11
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:11 07-12-2007
    BasiL



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача - найти в куче текстовых файлов все подстроки, заключенные в двойные кавычки и записать в один файл.
    пример исходного файла:

    Код:
    133 DIALOGEX 0, 0, 222, 132
    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    STYLE DS_FIXEDSYS | WS_CHILD
    EXSTYLE WS_EX_CONTROLPARENT
    FONT 8, "MS Shell Dlg"
    {
     CONTROL "Description:", 65535, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 5, 212, 8
     CONTROL "", 1090, EDIT, ES_LEFT | ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 5, 15, 212, 112
    }

    надо выцепить

    Цитата:
    "Description:"
     

    К сожалению, задача усложнена тем, что внутри вдойных кавычек могут быть пробелы, запятые и т.д. Т.е. идинственно необходимый мне разделитель для for /f - двойные кавычки.
    Но как я понял, конструкция for /f "delims=^"" меня тоже не спасает, и вообще for /f в качестве разделителя двойные кавычки не возьмет...
    Гугл подсказал только одно решение - юзать vbs.
    Но к сожалению, в нем не силен...
     
    Вопросов два:
    1) можно ли заставить for /f использовать кавычки в delims?
    2) Где почитать про VBS, желательно на русском.

    Всего записей: 3247 | Зарегистр. 13-03-2004 | Отправлено: 15:31 07-12-2007
    ArchangelLite

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу запретить другому пользователю на своем компе использование папки Games (маленький братик еще, а я не садист .
     
    Пишу в cmd.exe
     
    cacls C:\Games /G Женёк:N - Все правильно и он просит подтверждение и т.д.
     
    Иногда по просьбе родителей, я ее включаю (после того как уроки сделает)., и для этого хочу сделать .bat'ник, но как пропустить подтверждение. (В других командах ключ /q , но здесь не работает).
     

    Всего записей: 12 | Зарегистр. 18-11-2007 | Отправлено: 16:00 07-12-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Все заработало!
    Всему виной опять оказались лишние пробелы в конце строк...
    :linemid поправил. Спасибо!
     
    !

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 16:03 07-12-2007
    ArchangelLite

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

    Цитата:
    2) Где почитать про VBS, желательно на русском.

     
    Вот здесь: http://askit.ru/custom/progr_admin/progr_admin_plan.htm
     
    Больше нигде круче не найдешь, поверь...
     
    Добавлено:
    BasiL
     
    2) Где почитать про VBS, желательно на русском.
     
    Здесь : http://askit.ru/custom/progr_admin/progr_admin_plan.htm
     
    Больше нигде не найдешь, поверь...

    Всего записей: 12 | Зарегистр. 18-11-2007 | Отправлено: 16:06 07-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ArchangelLite
     
    echo y | cacls
     
     
    Добавлено:
    BasiL
    С некоторыми ограничениями, в строке будет найдено содержимое только первой пары кавычек

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%i in (file.ext) do (
       set "str=%%i"
       set str=!str:"=Ё!
       set str=!str:ЁЁ=!
       for /f "tokens=2 delims=Ё" %%i in ("!str!") do echo %%i
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:22 07-12-2007
    king_stiven

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

    Код:
    @echo off  
    chcp 1251
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%c in (1.txt) do (
        if "%%c"=="{" set proverka=yes
        if "%%c"=="}" set proverka=
        if defined proverka (
            set "str=%%c"
            set str=!str:"=Ё!
            set str=2!str:ЁЁ=!
            call :bu
        )
    )
    goto :eof
    :bu
    :begin
    for /f "delims=Ё tokens=1,2*" %%e in ("!str!") do (
         if not "%%f"=="" (
             echo %%f>>2.txt
             set str=%%g
             goto begin
        )
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:29 07-12-2007 | Исправлено: king_stiven, 05:30 08-12-2007
    01MDM



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%i in (file.ext) do (
       set "str=%%i"
       set str=!str:"=Ё!
       set str=!str:ЁЁ=!
       call:pars
    )
    goto:eof
    :pars
    set tok=2
    :begin
    for /f "tokens=%tok% delims=Ё" %%i in ("!str!") do (
        echo %%i
           set /a tok+=2 && if not .%%i==. goto:begin
    )
     

     
    А проверка {} что бы брать контент только внутри этих скобок?  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:25 07-12-2007 | Исправлено: 01MDM, 21:34 07-12-2007
    king_stiven

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

    Цитата:
    А проверка {} что бы брать контент только внутри этих скобок?  

    Да. Конечно возможно , что эти скобки многовложенные как в скриптах, но в примере только одна пара скобок.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:22 07-12-2007
    BasiL



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо, вроде все работает! Так и знал, что сначала надо кавычки на что-либо поменять, но не придумал, как...
    Да, пара скобок одна, но все нужные строки всегда начинаются с " CONTROL"
    Но это уже мелочи.
    Единственно, не понял для чего  

    Цитата:
    set str=!str:ЁЁ=!

    Убирает двойные ЁЁ? но откуда они там?
     
    и не понятно, зачем добавляется двойка вначале:

    Цитата:
    set str=2!str:ЁЁ=!

    Опечатка?
     
    вариант от 01MDM с обработкой нескольких вхождений в кавычках в одной строке излишен, нужно только первое вхождение.
     

    Всего записей: 3247 | Зарегистр. 13-03-2004 | Отправлено: 12:38 08-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BasiL
     
    то есть такой такой строчки быть не может?
    {  
     "Description:", 65535, STATIC, SS_LEFT | WS_CHILD |  
     
    и нам из следующей строчки нужно только Description: ?
     
    {  
    CONTROL  "Description:", 65535, STATIC, "SS_LEFT | "WS_CHILD |  
     
    тогда
     
    @echo off
    chcp 1251 > nul
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%c in (1.txt) do (
        if "%%c"=="{" set proverka=yes
        if "%%c"=="}" set proverka=
        if defined proverka (
            set "str=%%c"
            set str=!str:"=Ё!
            set str=!str:ЁЁ=!
            for /f "delims=Ё tokens=2" %%e in ("!str!") do echo %%e>>2.txt
        )
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:17 08-12-2007 | Исправлено: king_stiven, 08:54 09-12-2007
    BasiL



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

    Цитата:
    то есть такой такой строчки быть не может?

    Нет. Дальше голову ломать не надо, я нашел решение своей задачи, спасибо!
     
    Ответьте только на ворпос, зачем было

    Цитата:
    set str=!str:ЁЁ=!

    Только эта строка для меня осталась не пОнятой.
     
    Веррнее, я понимаю, что она удаляет "бывшие" двойные кавычки  две подряд, т.е. убирает из строки все вхождения "ЁЁ", но для чего эта обработка была включена я не понял...

    Всего записей: 3247 | Зарегистр. 13-03-2004 | Отправлено: 22:03 08-12-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru