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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kostyamks

    Цитата:
    Как исправить проблему с занесением данных в hosts фаил:  

    Скорее всего файл помечен read only.
    вставь перед правкой файла:
    attrib -r %hostfile%
    а после правки
    attrib +r %hostfile%

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 14:14 28-01-2011
    Free_Soft



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

    Цитата:
    Как исправить проблему с занесением данных в hosts фаил:  

    и батник надо запускать от имени Администратора

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 16:11 28-01-2011
    kostyamks



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

    Цитата:
    Скорее всего файл помечен read only.  
    вставь перед правкой файла:  
    attrib -r %hostfile%  
    а после правки  
    attrib +r %hostfile%

     
    Не помогло та же проблема.
     
    Может есть какой то другой способ добавления инофмации в C:\Windows\System32\drivers\etc\hosts через bat команду.

    Всего записей: 284 | Зарегистр. 12-09-2009 | Отправлено: 16:55 28-01-2011 | Исправлено: kostyamks, 17:04 28-01-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kostyamks
    Учетная запись пользователя, из под которой запускается батник, админская? Все же подозреваю, что дело именно в административных правах.
    Еще, как вариант, выберите в свойствах файла hosts вкладку "безопасность", и там задайте полные права на файл. После этого запустите bat
     
    Добавлено:
    Для автоматизации процесса можно использовать следующий код:

    Код:
    @echo off
    cls
    if "%OS%"=="Windows_NT" ( set hostfile=%systemroot%\system32\drivers\etc\hosts ) else ( set hostfile=%systemroot%\hosts )
    for /f "delims== skip=2 tokens=2 usebackq" %%i In (`wmic Group Where SID^="S-1-5-32-544" Get Name /Value`) do set Admins=%%i
    takeown /f "%hostfile%" && icacls "%hostfile%" /grant %Admins%:F
    1>>%hostfile% echo.
    1>>%hostfile% echo.127.0.0.1 nero.com
    1>>%hostfile% echo.127.0.0.1 my.nero.com
    1>>%hostfile% echo.127.0.0.1 secure.nero.com
    1>>%hostfile% echo.127.0.0.1 support.nero.com
    1>>%hostfile% echo.127.0.0.1 registernero.com
    ipconfig /flushdns  
    echo Overdone!  
    pause

     
    Но с правами стоит играться только на Висте и Win7. На XP и так все должно писаться

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 17:45 28-01-2011 | Исправлено: Free_Soft, 17:59 28-01-2011
    wolf0425



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

    Цитата:
    На XP и так все должно писаться
    вообще-то и на ХР право на изменение hosts имеют только члены группы "администраторы" - даже "опытные пользователи" его не имеют.
     
    А на висте/семерке - нужно не только запустить батник от имени пользователя, входящего в "администраторы" - но и при запуске cmd указать что он должен работать "от администратора", иначе доступа таки не дадут.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:40 28-01-2011 | Исправлено: wolf0425, 19:06 28-01-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну я имел ввиду, что с помощью takeown и icacls на ХП не пройдет фокус
     
    Добавлено:
    хотя

    Цитата:
    даже "опытные пользователи" его не имеют.  

    этого не знал

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 19:05 28-01-2011
    Vladins

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Для пакетной обработки avi файлов для каждого avi нужно создать avs  файл с именем avi файла и с таким содержимым:
    AviSource("имя файла.avi")
    Loadplugin("001")
    Loadplugin("002")
    Loadplugin("003")
     
    Я это делаю так:
    for %%i in (*.avi) do (
    echo AviSource("%%~ni.avi"^) LoadPlugin("001"^) LoadPlugin("002"^) LoadPlugin("003"^)^ >%%~ni.avs
    )
     
    Но все плагины выстраиваются в одну длинную строку и дописывать параметры в файл неудобно.
    Как сделать чтобы в avs (читай txt - тоже самое) каждый плагин начинался с новой строки?
     

    Всего записей: 68 | Зарегистр. 22-05-2010 | Отправлено: 23:37 28-01-2011
    wolf0425



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

    Код:
    @echo off
    for %%i in (*.avi) do 1>%%~ni.avs (
        echo AviSource("%%~ni.avi"^)  
        echo LoadPlugin("001"^)
        echo LoadPlugin("002"^)
        echo LoadPlugin("003"^)
    )  
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:17 29-01-2011
    tails80486



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Имеется папка с подпапками
    Задача: удалить все файлы без расширения
    PS Пробелы в названии файлов возможны

    Всего записей: 68 | Зарегистр. 23-11-2009 | Отправлено: 12:43 29-01-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tails80486
    for /f "delims=" %%a in (' dir /b /s /a-d * ') do if "%%~xa" equ "" echo del /q "%%~a"

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:29 29-01-2011
    tails80486



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    for /f "delims=" %%a in (' dir /b /s /a-d * ') do if "%%~xa" equ "" del /q "%%~a"
     
    Не пойму зачем там echo было. В любом случае спасибо.

    Всего записей: 68 | Зарегистр. 23-11-2009 | Отправлено: 14:04 29-01-2011
    wolf0425



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

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:46 29-01-2011 | Исправлено: wolf0425, 16:58 29-01-2011
    dmz2009

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, подскажите - возможно ли получить статус защиты антивируса Касперского (9-11 версий), особенно статус лицензии?

    Всего записей: 5 | Зарегистр. 01-11-2009 | Отправлено: 20:02 29-01-2011
    Jin32



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно порезать файл на куски по десять строк, файл такой:
    CONS#1_066666.QR (часть названия CONS и расширение известны)

    Код:
     
    ========== LAW66666.QR ==========
    КонсультантПлюс: Версия Проф
    Пользователь 66666
     
    Запрос на регистрацию:
    ####################
    #468-149-31-410-195#
    #968-98-686-02-810 #
    ####################
     
    ========== FIN66666.QR ==========
    КонсультантФинансист
    Пользователь 66666
     
    Запрос на регистрацию:
    #####################
    #153-645-840-842-807#
    #250-766-77-410-892 #
    #####################
     
    ========== EXP66666.QR ==========
    КонсультантПлюс: Эксперт-приложение
    Пользователь 66666
     
    Запрос на регистрацию:
    #####################
    #196-354-504-633-852#
    #964-267-56-180-094 #
    #####################
     
    ========== MLAW66666.QR ==========
    КонсультантПлюс: Москва Проф
    Пользователь 66666
     
    Запрос на регистрацию:
    #####################
    #190-845-512-982-580#
    #329-586-33-609-897 #
    #####################
     
    .... еще куча таких блоков
     

    В строчках с номерами 1, 11, 21, 31 и т.д. названия файлов-кусков которые надо получить.  В общем случае названия заранее неизвестны, даже количество символов, например возможно такая сложная конструкция RLAW284#35861.QR, но известно что знаков "=" ровно 10 потом пробел, потом имя с расширением, потом опять пробел и 10 "="
     
    В конечных файлах все содержимое не важно, важны только цифры в рамке, то есть на примере файла  
    LAW66666.QR, его содержимое должно быть таким  

    Код:
     
    ========== LAW66666.QR ==========
    КонсультантПлюс: Версия Проф
    Пользователь 66666
     
    Запрос на регистрацию:
    ####################
    #468-149-31-410-195#
    #968-98-686-02-810 #
    ####################
     
     

    или таким

    Код:
     
    КонсультантПлюс: Версия Проф
    Пользователь 66666
     
    Запрос на регистрацию:
    ####################
    #468-149-31-410-195#
    #968-98-686-02-810 #
    ####################
     
     

    или даже таким

    Код:
     
    ####################
    #468-149-31-410-195#
    #968-98-686-02-810 #
    ####################
     
     

     
    Количество блоков так же не известно зарание, может быть несколько штук, а может быть и 40-50, количество строк в исходном файле естественно делиться на 10.
    Может быть как то построить цикл который берет первую строчку, создает файл с названием из нее, затем переносит в этот файл первые десять строчек из исходного, затем цикл повторяется.
     
    Или каким то образом сосчитать сначала количество строк, разделить на десять и создавать файлы с названием из N+1 строки и содержимым из строк N+1,N+2...N+9 или N+6,N+7,N+8,N+9
     
    Если названия будут  
    ========== LAW66666.QR ==========
    ========== FIN66666.QR ==========
    ========== EXP66666.QR ==========
    вместо нужных
    LAW66666.QR
    FIN66666.QR
    EXP66666.QR
    уже не плохо, думаю у назаваний я смогу хвосты отрезать, как нибудь так:

    Код:
     
    for %%I in ("="*) do set XXX=%%~nI
    move "="* %XXX:~11,256%.QR
     
    пока правда и это не получается

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 00:56 30-01-2011 | Исправлено: Jin32, 01:34 30-01-2011
    king_stiven

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

    Цитата:
    qulinxao  
    в gnuwin32 coreutils есть split (хоть и не особо умная утилита, но по строкам делит), 30мег по кб не более 30 тыс. строк:  
    split -d -a 5 -l 30000 input.txt output_file_

     
    или sed ом

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 03:25 30-01-2011 | Исправлено: king_stiven, 03:27 30-01-2011
    Jin32



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Утилиты использовать не желательно, ибо тогда ее за собой таскать придется. Давненько я уже пытался решить эту задачу с помощью какой то утилиты, может быть даже этой, не очень корректно работала, руские буквы превращала в абракадабру и имена файлов получались вида  
    ========== LAW66666.QR ==========, я даже тогда готов был с этим смериться, обрезать хвосты у меня как то получилось, не помню уже как, а русский текст мне не важен, важны только цифры в рамках. Но на утилиту еще касперский ругался, почему то он решил что утилита пытается адреса из адресной книги выдергивать. и я решил что надо все таки как то стандартными средствами обойтись.

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 09:01 30-01-2011
    wolf0425



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

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set _file=nul
    for /f "tokens=1* delims=]" %%a in (' find /n /v "" ^<file ') do (
        set "_str=%%~b"
        if "!_str:~0,1!" equ "=" (
            for /f "tokens=2" %%f in ("%%~b") do set "_file=%%~f"
        ) else (1>>!_file! echo.%%~b)
    )
     

    строки вообще не считает, раскидывает по разным файлам куски между строк, начинающихся с =
    да, если файл типа LAW66666.QR есть  - он дописывается новым блоком, если надо перезаписывать  - допиши стирание в цикл выдирающий имя.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:14 30-01-2011 | Исправлено: wolf0425, 11:20 30-01-2011
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jin32
    А у меня так вышло:  

    Код:
    @echo off
    setlocal enabledelayedexpansion
    set "file=cons*.qr"
    for /f "tokens=*" %%a in ('find /v "" %file%') do (
    set "line=%%a"
    if "!line:~0,5!"=="=====" (set "fname=!line:~11,-11!" & echo.!line!>>!fname!) else (echo.!line!>>!fname!)
    )

    пять знаков - это так, для надежности.

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 12:35 30-01-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Подскажите, пожалуйста как можно данный код сократить?

    Код:
    if %png%==1 goto:1
    if %png%==2 goto:1
    if %png%==3 goto:1
    if %png%==4 goto:1
    if %png%==5 goto:1
    if %png%==6 goto:2
    if %png%==7 goto:2
    if %png%==8 goto:2


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 15:42 30-01-2011
    01MDM



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

    Код:
     
    for /l %%i in (1,1,5) do if %png%==%%i goto:1
    for /l %%i in (6,1,8) do if %png%==%%i goto:2
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:52 30-01-2011
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru