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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    for /f "tokens=*" %%i in ('type file ^|find /i /n "string1"') do for /f "tokens=1 delims=[]" %%a in ('echo %%i') do set "skip=%%a"
    set /a skip-=1
    for /f "tokens=* skip=%skip%" ...

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:27 04-01-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"string 1" 1.txt') do set /a n=%%i-1
    more +%n% 1.txt
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:21 04-01-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    niko7
    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=0&limit=1&m=4#1

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:11 04-01-2010
    win2005

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята подскажите, есть текстовый файл с линками
    например:
     
    http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe
    http://infanata.ifolder.ru/control/?file_id=12966438&code=cd0626316ea0d89234d8fa5e26966cac
    http://infanata.ifolder.ru/control/?file_id=13866537&code=f387209c083d6e5557323daa3cb3b4bd
     
    Нужно привести к виду:
     
    title1=http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe
    title2=http://infanata.ifolder.ru/control/?file_id=12966438&code=cd0626316ea0d89234d8fa5e26966cac
    title3=http://infanata.ifolder.ru/control/?file_id=13866537&code=f387209c083d6e5557323daa3cb3b4bd
     
    Заранее спасибо

    Всего записей: 27 | Зарегистр. 11-03-2006 | Отправлено: 11:16 04-01-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=*" %%i in ('type 1.txt') do call:cnt "%%i"
    move 1.tmp 1.txt
    goto:eof
     
    :cnt
    set /a cnt+=1
    1>>1.tmp echo title%cnt%=%~1
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:34 04-01-2010
    win2005

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

    Всего записей: 27 | Зарегистр. 11-03-2006 | Отправлено: 11:44 04-01-2010
    mugil_cephalus

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

    Код:
    set "cnt=1"
    for /f "tokens=*" %%A in ('"type x:\file.txt"') do call:_1 "%%A"
    set var=
    del /q x:\file.txt
    ren x:\file1.txt file.txt
    pause
    goto :eof
     
    :_1
    set "var=%~1"
    1>>x:\file1.txt echo title%cnt%=%var%
    set /a cnt+=1
    goto :eof
     

     
    любопытно, почему у меня спотыкался на амперсанде
    X:\>set "cnt=1"
     
    X:\>for /F "tokens=*" %A in ('"type x:\file.txt"') do call:_1 "%A"
     
    X:\>call:_1 "http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe"
     
    X:\>set "var=http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe"
     
    X:\>echo title1=http://infanata.ifolder.ru/control/?file_id=13952293 1>>x:\file1.txt  & code=05f9110efcd952dc12763282207a7dbe
    "code" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
     
    вопрос снят
    я не заметил, что тоже спотыкался на амперсанде код:


    Цитата:
    Код:  
    @echo off  
    setlocal  
     
    for /f "tokens=*" %%i in ('type 1.txt') do call:cnt "%%i"  
    move 1.tmp 1.txt  
    goto:eof  
     
    :cnt  
    set /a cnt+=1  
    1>>1.tmp echo title%cnt%=%~1  
     


    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:19 04-01-2010 | Исправлено: mugil_cephalus, 13:42 04-01-2010
    win2005

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да я вначале, не  заметил что в готовом файле линк обрезается типа
     
    title1=http://infanata.ifolder.ru/control/?file_id=13952293
    title2=http://infanata.ifolder.ru/control/?file_id=12966438
    title3=http://infanata.ifolder.ru/control/?file_id=13866537

    Всего записей: 27 | Зарегистр. 11-03-2006 | Отправлено: 12:35 04-01-2010
    mugil_cephalus

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

    Код:
    set "cnt=1"
    for /f "tokens=*" %%A in ('"type x:\file.txt"') do call:_1 "%%A"
    set var=
    del /q x:\file.txt
    ren x:\file1.txt file.txt
    goto :eof
     
    :_1
    set "var=%~1"
    0>nul 1>>x:\file1.txt set /p="title%cnt%=%var%"
    1>>x:\file1.txt echo.
    set /a cnt+=1
    goto :eof

     
    Добавлено:
    win2005
    вот более правильно:

    Код:
    set "cnt=1"
    for /f "tokens=*" %%A in ('"type x:\file.txt"') do call:_1 "%%A"
    set var=
    del /q x:\file.txt
    ren x:\file1.txt file.txt
    goto :eof
     
    :_1
    set "var=%~1"
    0>nul 1>>x:\file1.txt set /p="title%cnt%=%var%"
    if "_%cnt%" leq "_2" 1>>x:\file1.txt echo.
    set /a cnt+=1
    goto :eof
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:22 04-01-2010
    win2005

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо всем за соучастие... Заработало

    Всего записей: 27 | Зарегистр. 11-03-2006 | Отправлено: 13:53 04-01-2010
    01MDM



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

    Цитата:
    Да я вначале, не  заметил что в готовом файле линк обрезается типа  

    Я тоже не заметил:

    Код:
     
    Код:  
    @echo off
    setlocal
     
    for /f "tokens=*" %%i in ('type 1.txt') do call:cnt "%%i"
    move 1.tmp 1.txt
    goto:eof
     
    :cnt
    set /a cnt+=1
    set "var=%~1"
    set "var=%var:&=^&%"
    1>>1.tmp echo title%cnt%=%var%
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:08 04-01-2010
    freezeg

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сорри если вопрос задавали.
    Имеем строки в виде
    -02.04.2009 07:15:11 "S0MUJDXXXX" "XcXz" 10.41.180.238 43200 " #Blabla"  
    Все они разные, совпадает только в этом тексте начало ип адреса 10.4
    Требуется из всех строк собрать базу ипшников в другой файл и никакой не нужной информации больше.

    Всего записей: 57 | Зарегистр. 20-12-2005 | Отправлено: 14:52 05-01-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freezeg
    Цитата:
    Все они разные, совпадает только в этом тексте начало ип адреса 10.4  
    все разные - это у всех текст в пределах формата  (количество полей, разделенных пробелами) разный или они все совсем разные и ip ловить надо только по " 10.4"?
    sed -r -n "s/.* (10\.4[0-9.]*).*/\1/gp" file.txt >iplist.txt
     
    а если просто пятое поле выдрать в файл - то можно и без sed,
    for /f "tokens=5" %%a in ( file.txt ) do 1>>iplist.txt echo %%a

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



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

    Цитата:
    Подскажите, нужно получать вчерашнюю дату. Сделал так:
    set /a da = %date:~0,2%
    set /a ok = da -1
    Проблема в том, что первое число каждого месяца минус 1 получается 0, а надо последнее
    число месяца. Может есть какой-нибудь красивый способ .
     

     
    Был такой вариант (работает корректно для даты в формате dd/mm/yyyy)
    (насколько красиво - решать не мне )
    Он (мой вариант), БЕЗ УЧЁТА ВИСОКОСНЫХ ГОДОВ!!! - в шапке (см. работа с текстом, датами и файлами).
    Там же есть и более красивый вариант - с учётом високосных годов.

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 22:38 05-01-2010 | Исправлено: Kirillhome, 22:53 05-01-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Благодаря подсказкам из "шапочного раздела"
    от evgeni666 -
    · Использование даты на день раньше чем сегодня (учитываются високосные годы)
    и от igor_andreev -
    · Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
     
    "родился" такой вариант (не зависит от формата даты, учитывает високосные годы, можно как прибавлять, так и убавлять передаваемое в качестве параметра количество дней к текущей дате)
    Подробнее...
    Довольно громоздко - но вроде всё правильно

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 02:52 06-01-2010 | Исправлено: Kirillhome, 02:59 06-01-2010
    freezeg

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

    Всего записей: 57 | Зарегистр. 20-12-2005 | Отправлено: 06:47 06-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно "прошуршать" раздел реестра HKLM\Software\Classes\ по всем расширениям файлов на предмет того, что у них записано в параметре по умолчанию. Для одного расширения пишу так:

    Код:
    @FOR /F "skip=2 tokens=3,* usebackq" %%i IN (`Reg Query HKLM\Software\Classes\.zip /ve`) DO @ECHO "%%j"

    А как пройтись по всем?

    ----------
    Нет судьбы, кроме той, которую мы выбираем.

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 22:47 06-01-2010
    Kirillhome



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

    Код:
     
    @echo off
    if exist all_key.txt del all_key.txt
    if exist keyl_err.txt del key_err.txt
    Reg Query HKLM\Software\Classes\ /s > All_Reg.txt
    for /f "tokens=4,5 delims=\" %%a in ('FIND /I "HKEY_LOCAL_MACHINE\Software\Classes\\." All_Reg.txt') Do Call :Prv %%a %%b
    if exist All_Reg.txt del All_Reg.txt
    if exist 1.txt del 1.txt
    if exist 2.txt del 2.txt
    GOTO :EOF
     
    :PRV
    set Sec_par=%2
    if "%Sec_par%"=="" (
       Reg Query HKLM\Software\Classes\%1 /ve 1>1.txt 2>2.txt&&FOR /F "skip=2 tokens=3,* usebackq" %%i IN (`Reg Query HKLM\Software\Classes\%1 /ve`) DO @ECHO %1="%%j">>all_key.txt
       Reg Query HKLM\Software\Classes\%1 /ve 1>1.txt 2>2.txt||echo Ошибочная команда Reg Query HKLM\Software\Classes\%1 /ve>>key_err.txt
    )
     

    На выходе - два файла
    all_key.txt - содержит информацию в виде расширение="параметр по умолчанию"
    key_err.txt - содержит информацию о "неопределённых расширениях", т.е. тех, у которых в реестре стоит (значение не присвоено)

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 04:46 07-01-2010 | Исправлено: Kirillhome, 04:47 07-01-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pacho
    А не проще с помощью `assoc'?

    Код:
     
    1>all_key.txt assoc
     

     
    Или если нужно узнать не ассоциированные расширения тоже:

    Код:
     
    @echo off
    setlocal
     
    set "exec=reg query hklm\software\classes ^| findstr "HKEY_LOCAL_MACHINE\\software\\classes\\\.""
    for /f "tokens=4 delims=\" %%i in ('%exec%') do 1>>ext.txt 2>>err.txt assoc %%i
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:31 07-01-2010 | Исправлено: 01MDM, 09:48 07-01-2010
    Pacho



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

    Цитата:
    А не проще с помощью `assoc'?  

    А про assoc я совсем забыл...
    В общем надо написать скрипт для снятия ассоциаций файлов после некорректного удаления приложения. К примеру, есть у нас расширение .OGG, ассоциированное с Winamp (Winamp.File.OGG). Так вот надо проверить все расширения и удалить те, значение по умолчанию которых начинается с Winamp. (Или очистить значение по умолчанию).

    ----------
    Нет судьбы, кроме той, которую мы выбираем.

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 18:22 09-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

    Компьютерный форум 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