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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    Maza_Faka



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

    Цитата:
    в реестре появляются эти ветки

    Это ссылки, а вот где реально прописываются параметры:

    Код:
     
    HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:50 16-06-2009
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza_Faka
    Я хотел добиться того, чтоб при вызове gpedit.msc эти параметры были там прописаны и их было видно. Очевидно, они где то хранятся в файле груп. политики.

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 12:54 16-06-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, есть два текстовых файла
    Задача: вывести построчно содержимое каждого из них в результирующий
     
    пример:
    1.txt:
    aaa1
    bbb1
    ccc1
     
    2.txt:
    aaa2
    bbb2
    ccc2
     
    надо получить 3.txt
    aaa1
    aaa2
    bbb1
    bbb2
    ccc1
    ccc2
     
    у кого есть идеи?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 13:35 16-06-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
     
    Однострочных идей нет:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=*" %%i in (1.txt) do set "last=%%i"
    for /f "tokens=1 delims=:" %%i in ('findstr /n %last% 1.txt') do set "last=%%i"
     
    for /l %%i in (1,1,%last%) do (
         1>>3.txt sed -n "%%i p" 1.txt
         1>>3.txt sed -n "%%i p" 2.txt
    )
     

    Без сравнения в каком файле больше строк.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:26 16-06-2009
    wolf0425



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

    Код:
    for /f "tokens=*" %%i in (1.txt) do set "last=%%i"
    for /f "tokens=1 delims=:" %%i in ('findstr /n %last% 1.txt') do set "last=%%i"  
    Это что - такой креативный подсчет строк?  
    в одну строку он делается или счетчиком в первом цикле do set /a last+=1  или так
    for /f %%i in ('type 1.txt ^|find /c /v "" ') do set "last=%%i"
     
    кстати, время выполнения последнего цикла растет быстрее чем количество строк в файлах, так что если строк очень много - будет затык.
     
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:56 16-06-2009 | Исправлено: wolf0425, 19:59 16-06-2009
    HaK1R



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

    Код:
    @echo off
    chcp 1251 1>nul
    net localgroup "Имя группы" | find "%username%" 1>nul 2>&1
    if errorlevel 1 (reg import "C:\11\file.reg")
    chcp 866 1>nul
     

    Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 21:48 16-06-2009
    01MDM



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

    Цитата:
     
    for /f %%i in ('type 1.txt ^|find /c /v "" ') do set "last=%%i"  
     

     
    Я о find даже и не вспомнил
    Давно им не пользовался. Как-то сравнивал время работы find и findstr - последний оказался заметно шустрее.
     
    А так да, твой способ выглядит быстрее и короче.
     
    "do set /a last+=1" специально не использовал - он теряет пустые строки.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:50 16-06-2009
    wolf0425



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

    Цитата:
    Как-то сравнивал время работы find и findstr - последний оказался заметно шустрее.

    ну шустрее так шустрее - вроде можно и им в один проход
    for /f "tokens=1 delims=:" %%i in ('findstr /n "^" 1.txt') do set "last=%%i"
    правда на тестовом файлике 10000 строк он уже заметно отстает
     
    в твоем варианте подсчета last, кстати, глюки:
    если 1.txt заканчивается на пустые строки - хвост 2.txt будет проигнорирован.
    т.е. по надежности несильно лучше счетчика set /a last+=1

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:45 17-06-2009 | Исправлено: wolf0425, 01:18 17-06-2009
    danilik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть такая задачка:
     
    У меня есть список папок с разными названиями. В каждой папке (на пример папка с названием 123456) лежит текстовый файлик (например 123456.txt) с названием папки. в текстовом файлике куча разных строк. Мне надо строка, которая всегда начинается с pw_cu:  и имеет вид "pw_cu: хххххххххххххх". Мне надо выкусить значение хххххххххххххх и переименовать в него папку в которой нахится этот файл.
    Помогите пожалуйста

    Всего записей: 3 | Зарегистр. 30-01-2009 | Отправлено: 10:56 17-06-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо за идею
    если поставить это
    for /f "tokens=*" %%i in (1.txt) do set "last=%%i"
    for /f "tokens=1 delims=:" %%i in ('findstr /n %last% 1.txt') do set "last=%%i"
    у меня выдает
    FINDSTR: Не удается открыть file
    FINDSTR: Не удается открыть not
    FINDSTR: Не удается открыть found
    FINDSTR: Не удается открыть in
    FINDSTR: Не удается открыть settings
    FINDSTR: Не удается открыть directory
    FINDSTR: Не удается открыть attempting
    FINDSTR: Не удается открыть to
    FINDSTR: Не удается открыть download
     
    wolf0425
    такой вариант вполне устроил, спасибо
    for /f %%i in ('type 1.txt ^|find /c /v "" ') do set "last=%%i"
    при файле в 956 строк
    Exit code: 0    Time: 19.015
    только sed, как обычно, по дефолту не использует перевод строк а-ля windows
    поэтому приходится добивать своим скриптом из шапки
    хотя я как то недавно видел обход этой ошибки в посте 01MDM
     
    в общем спасибо, задача решена

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:54 17-06-2009
    01MDM



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

    Цитата:
    у меня выдает  

     
    Процентов на 75 это set.

    Цитата:
    только sed, как обычно, по дефолту не использует перевод строк а-ля windows  

    Наверное а-ля  unix? Последний sed-4.2 уже все делает правильно
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:32 17-06-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    01MDM
    на 100% это 'findstr /n %last% 1.txt' во втором for...
     
    Добавлено:
    А вот если %last% экранировать кавычками и ключем /C то получим требуемый результат.
     
    Добавлено:
    ну и конечно /L забывать нельзя...
     
    Добавлено:
    Но вообще я предлагаю решать задачу примерно так:
    Код:
    (TYPE 1.txt&ECHO MY_STING_TO_DETECTION)|findstr /N /L /C:"MY_STING_TO_DETECTION"

     
    Добавлено:
    Обращаю внимание что номер будет выводиться реальный, а не на единицу больше(как может показаться на первый взгляд).
     
    Добавлено:
    И еще - так как экранирование спецсимволов внутри FOR в данной ситуации не совсем простое то привожу сводный вариант:
    Код:
    FOR /F "TOKENS=1 DELIMS=:" %%i IN ('^(TYPE 1.txt^&ECHO MY_STING_TO_DETECTION^)^|findstr /N /L /C:"MY_STING_TO_DETECTION"') DO SET "last=%%i"

     
    Добавлено:
    И по поводу быстродействия данного варианта

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 12:37 17-06-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    да версия 4.2 наконец-то правильно ставит перенос строки
    все равно та же ошибка, значит ошибка, как говорит yurkesha
    здесь findstr /n %last% 1.txt
    и странно то, что если первый файл (оба файла) не заканчивается пустой строкой последние две строки скливаются в одну
    yurkesha
    приведи весь код

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 13:22 17-06-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    всю задачу я не делал - только замену двум строкам связанным с подсчетом количества строк(включая пустые). Итоговый код на замену приведен у меня выше и за катом код для оценки быстродействия...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 13:26 17-06-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    господа-знатоки sed и т.п.
    обратная задача
    высети из исходного файла каждую вторую строку в результирующий
    из файла содержащего
    aaa1  
    aaa2  
    bbb1  
    bbb2  
    ccc1  
    ccc2
    надо получить
    aaa2  
    bbb2  
    ccc2

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:41 17-06-2009
    Maza_Faka



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

    Код:
     
    Sed -n "0~2p" test.txt > result.txt
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:08 17-06-2009
    garri671



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

    Цитата:
    Как закрыть процесс через BAT-файл?

    так же и через pskill

    Всего записей: 133 | Зарегистр. 18-07-2007 | Отправлено: 07:59 18-06-2009 | Исправлено: garri671, 08:32 18-06-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Цитата:
    Добавлено:
    Обращаю внимание что номер будет выводиться реальный, а не на единицу больше(как может показаться на первый взгляд).  
    да с чего же это он реальный?

    Код:
    echo test>test.txt
    FOR /F "TOKENS=1 DELIMS=:" %%i IN ('^(TYPE test.txt^&ECHO MY_STING_TO_DETECTION^)^|findstr /N /L /C:"MY_STING_TO_DETECTION"') DO echo %%i
    Выводит, как легко догадаться 2 - а я как-то предпочитаю считать, что файл test.txt состоит из одной строки..
     
    вот если последняя строка файла не заканчивается переводом строки - то тогда реальный.
    Вывод: способ подсчета быстрый но очень неуниверсальный.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:55 18-06-2009 | Исправлено: wolf0425, 17:00 18-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Если файл заканчивается переводом строки, значит эта пустая строка присутствует. Любой нормальный счетчик строк обязан ее учитывать.

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:13 18-06-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush заканчивается строка переводом строки или eof - это все равно одна строка.
    Если за переводом строки файл не заканчивается - то только тогда начинается следующая строка.
    Любой нормальный счетчик от winword до findstr - считает строки именно так, по их началам, а не по переводам строк.
     
    для тренировки определись:
    1. сколько строк в файле состоящем только из одного перевода строки
    2. сколько строк в файле, который на 1 перевод строки короче.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:15 18-06-2009 | Исправлено: wolf0425, 19:41 18-06-2009
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru