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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    Smitis



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

    Цитата:
    Народ а вот тута у меня net share IPC$ /delete тока когда пускаю у меня пишет доступ отказано. Как грузить это через профиль?

    Права соотвествующие надо иметь

    Цитата:
    А, ещё как пускать прогу через батник, поискал но внятно нечего не нашел.

    Ну, например, написать полный путь к проге, типа:
    Ц:\папка_проги\это_прога.exe

    Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 23:44 07-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Smitis
    твой ответ вызовит еще большую кучу вопросов
    Nekt
    start "" /w "Ц:\папка_проги\это_прога.exe"
    имхо более правильный ответ, вообще именно этот вопрос поднимался уже неоднократно, такое ощущение, что тебе лень было читать ветку
    igor_andreev

    Цитата:
    CreateObject("WScript.Shell").Run("""C:\Program Files\QQQ\1.exe""")&" start",0,false

    красавец, где же ты раньше был?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 00:21 08-03-2007
    ViSiToR



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

    Цитата:
    но подкаталоги не чистит... что неправильно?

    В моём примере переменная %%i принимает значение для всех файлов с расширением *.mp3 текущего каталога... хотя Del /s будет чистить, просто в лог эта чистка не попадает
     
    Чтобы использовать подобное и для подкаталогов (чтобы это учитывалось при записи в лог), нужно установить ключь /R у команды For, и задать текущий каталог для удаления. А также и каталог для лог файла, ведь если оставить его запись в текущий каталог (не указывая пути к лог файлу), то он попадает под удаление, и постоянно будет писаться заного...
     
    Вот пример для удаления файлов с определённым расширением в указанном каталоге включая во всех подкаталогах, и ведения лога для процесса удаления (удалён/не удалён):
     

    Код:
    @echo off
    chcp 1251 > nul
    Set LogPath=C:\Log.txt
    Set DelPath=C:\Test
    Set Ext=*.mp3
    CD "%DelPath%"
    For /R %%i In (%Ext%) Do (
    Del "%%i"
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
    )



    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:28 08-03-2007 | Исправлено: ViSiToR, 04:33 08-03-2007
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Всем
     
    Вопрос №1
    Как кодировать/раскодировать в HEX через командную строку ?
    Вопрос №2
    Как средствами командной строки в Windows XP читать из файла:
     
    data.cfg
    --------
    full=1
    trial=0
    --------
     
    преобразовать в переменные:
    %full% со значением 1
    %trial% со значением 0
     
    А также как записывать переменные в файл?
     
    Как можно защитить содержимое пакетного файла от любопытных глаз с сохранением работоспособности?

    Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 07:26 08-03-2007
    ViSiToR



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

    Цитата:
    Как средствами командной строки в Windows XP читать из файла:

    Я как то давно приводил пример для чтения из .ini файлов, но уже не могу найти где, поэтому привожу пример ещё раз (наверно уже подругому ):
     

    Код:
    Set FileToRead=data.cfg
    Set Key=full
    For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do Set Value=%%i
    Echo %Value:~+5%

     
    Я уже не помню, кажется можно определять длину переменной, но %Value:~+5% это для того чтобы убрать первые 5 символов от найденной строки (с ключом и значением).
     

    Цитата:
    А также как записывать переменные в файл?

    В каком смысле записывать? просто записать значение, или записать так как она выглядет?
     
    Если значение то просто так: Echo %Env% > File.txt
    Если как есть, то нужно удваивать знаки процента: Echo %%Env%% > File.txt
     

    Цитата:
    Как можно защитить содержимое пакетного файла от любопытных глаз с сохранением работоспособности?

    Отучить обладающего любопытными глазами от чтения батника?    
     
    Добавлено:

    Цитата:
    Отучить обладающего любопытными глазами от чтения батника?

    Или использовать компилятор для батников.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 08:10 08-03-2007
    FXPELIVE

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

    Цитата:
    В каком смысле записывать? просто записать значение, или записать так как она выглядет?  
     
    Если значение то просто так: Echo %Env% > File.txt  
    Если как есть, то нужно удваивать знаки процента: Echo %%Env%% > File.txt

     
    Нет, например была переменная %data% со значением 1 а её нужно записать в файл config.cfg так:
    data=1
     

    Цитата:
    Или использовать компилятор для батников.

    Спасибо, попробую
     

    Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 08:45 08-03-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    winvik
     
    Если нужно удалить только файлы *.mp3 и записать в лог какие файлы были удалены, то можно так:
     

    Код:
     
    @Echo off
    Chcp 1251
    For /r C:\Test %%i in (*.mp3) do (
    Echo "%%i" >> D:\Logs\Log.txt
    Del /q "%%i")
     

     
     
    Добавлено:
    FXPELIVE

    Цитата:
    Нет, например была переменная %data% со значением 1 а её нужно записать в файл config.cfg так:  
    data=1

     
    @Echo off
    Set data=1
    Echo data=%data% >> config.cfg
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:03 08-03-2007
    ViSiToR



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

    Цитата:
    нужно записать в файл config.cfg так:  
    data=1

    Нет, одними средствами батника записывать значение в середину файла невозможно (может и возможно, но это всё муторно будет, нужно будет весь файл построчно перечитывать и перезаписывать).
     
     
    Maza Faka
     

    Цитата:
    Если нужно удалить только файлы *.mp3 и записать в лог какие файлы были удалены, то можно так:

    И чем это лучше моего примера?  
     

    Цитата:
    @Echo off  
    Set data=1  
    Echo data=%data% >> config.cfg

    Я так понял имеется в виду запись как значения для ключа.
     
    Добавлено:
    FXPELIVE
    Посмотри в шапке есть пример для замены текста в файле (в Работа с текстом, датой, и файлами), можно таким образом заменять data=1 на data=%data%.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:02 08-03-2007 | Исправлено: ViSiToR, 10:08 08-03-2007
    FXPELIVE

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

    Цитата:
    Цитата:
    @Echo off  
    Set data=1  
    Echo data=%data% >> config.cfg

    В принципе идея...
     
    Кто знает как узнать серийный номер компакт-диска и это значение сохранить в переменной %cdnum%  

    Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 10:31 08-03-2007
    Tipulatoid



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

    Цитата:
    Нет, одними средствами батника записывать значение в середину файла невозможно (может и возможно, но это всё муторно будет, нужно будет весь файл построчно перечитывать и перезаписывать).

    Возможно, и именно так как вы сказали - построчным переписыванием и перезаписью. В принципе, имхо, ничего муторного здесь нет. на всякий лучай приведу пример кода записи в, скажем, 4-ую строку config.cfg:

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    set line=4
     
    del /q tmp_file 2>nul
    set counter=1
    for /f "tokens=*" %%a in (config.cfg) do (
       if !counter!==!line! (echo %нужная переменная%>>tmp_file
    ) else (
       echo %%a>>tmp_file)
       set /a counter=!counter!+1)
     
    del /q config.cfg 2>nul
    ren tmp_file config.cfg
     

    Код мною взят из примера Elroir на 27-ой стр. этого топика.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 14:12 08-03-2007 | Исправлено: Tipulatoid, 14:22 08-03-2007
    ViSiToR



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

    Цитата:
    имхо, ничего муторного здесь нет

    Я имел в виду, если файл большой, и строк много, и записывать нужно с учётом замены существующей строки, ведь как мне показалось, требуется запись в файл обладающий структурой .ini файла (Секция, ключи, значения).

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:29 08-03-2007
    Maza Faka



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

    Цитата:
    И чем это лучше моего примера

     
    Да вроде бы попроще и покороче

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:16 08-03-2007
    Levitant



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Народ подскажите пожалуйста, как должен выглядеть батник, который ищет в определенном файле определенную строку и заменяет её. Причем имя файла менять не надо.
     
    Вот по этому примеру приходится заменять сохранять фаил с другим именем.

    Код:
     
    @echo off
    :: Create the assembler program, by Herbert Kleebauer
    echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> %temp%.\sbs2.com
    echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> %temp%.\sbs2.com
    echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> %temp%.\sbs2.com
    echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> %temp%.\sbs2.com
    echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> %temp%.\sbs2.com
    echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> %temp%.\sbs2.com
    echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> %temp%.\sbs2.com
    echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> %temp%.\sbs2.com
    echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> %temp%.\sbs2.com
    echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> %temp%.\sbs2.com
    echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> %temp%.\sbs2.com
    :: Use the program
    %temp%.\sbs2.com 0 "2456" "3333" < "%appdata%\Opera\Opera\profile\opera6.ini" > "%appdata%\Opera\Opera\profile\for_opera\opera63333.ini"
    :: Delete the program
    del %temp%.\sbs2.com
     

     
    Заранее спасибо.

    Всего записей: 62 | Зарегистр. 09-11-2006 | Отправлено: 18:05 08-03-2007 | Исправлено: Levitant, 18:06 08-03-2007
    ViSiToR



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

    Цитата:
    по этому примеру приходится заменять сохранять фаил с другим именем

    Зачем? можно тот же выходной файл подставить:
     

    Код:
    @echo off
    :: Create the assembler program, by Herbert Kleebauer
    echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> %temp%.\sbs2.com
    echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> %temp%.\sbs2.com
    echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> %temp%.\sbs2.com
    echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> %temp%.\sbs2.com
    echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> %temp%.\sbs2.com
    echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> %temp%.\sbs2.com
    echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> %temp%.\sbs2.com
    echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> %temp%.\sbs2.com
    echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> %temp%.\sbs2.com
    echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> %temp%.\sbs2.com
    echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> %temp%.\sbs2.com
    :: Use the program
    %temp%.\sbs2.com 0 "2456" "3333" < "%appdata%\Opera\Opera\profile\opera6.ini" > "%appdata%\Opera\Opera\profile\opera6.ini"
    :: Delete the program
    del %temp%.\sbs2.com

     
    Добавлено:
    Maza Faka

    Цитата:
    Да вроде бы попроще и покороче

    Что может быть проще, чем задать заранее переменные, и подстьтавлять под них нужные значения? а на счёт короче, это да, желательно иногда короче, но в твоём примере, будут в лог попадать ВСЕ файлы из цикла, вне зависимости от того, был ли удалён файл, или нет - зачем тогда лог нужен

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:10 08-03-2007
    Smitis



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

    Цитата:
    твой ответ вызовит еще большую кучу вопросов

    Конечно вызовет.

    Цитата:
    имхо более правильный ответ

    Не уверен. У меня более общий. А тебе придётся объяснять ещё значение параметров команды start, объяснять, зачем нужна эта команда и т.п.
    А ведь ещё можно не указывать расширение исполняемого файла, если оно есть в переменноё pathext. И не указывать путь, если исполняемый файл лежит в текущей папке или в папке, прописаной в path. И т.д.

    Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 07:21 09-03-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Такая вот задачка (уже голову сломал ): Есть два раздела HDD, диск "C" и "D", на обоих дисках есть каталоги "Program" с вложеными каталогами, в каждом вложеном каталоге находится файл "Set.cfg", задача: как скопировать файлы "Set.cfg" из всех вложенных каталогов с диска "C" во все вложеные каталоги диска "D", то есть файл "Set.cfg" из "C:\Program\Old" в "D:\Program\Old" из "С:\Program\New" в "D:\Program\New", при помощи батника, конечно.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:35 09-03-2007
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    xcopy
    Примерно так, сделав C:\Program\Old текущим:
    xcopy /s set*.cfg D:\Program\Old
    Маска нужна (set*.cfg), если в текущем каталоге нет нужного файла (будет выдано сообщение, что файл не найден).

    Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 09:30 09-03-2007
    s800



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые знатоки работы с bat строкой, см. мой топик выше http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=920, как запустить bat  файла на др.машине сети? решения пока нет?!

    Всего записей: 1684 | Зарегистр. 21-02-2005 | Отправлено: 13:00 09-03-2007 | Исправлено: s800, 13:01 09-03-2007
    Maza Faka



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

    Цитата:
    Что может быть проще, чем задать заранее переменные, и подстьтавлять под них нужные значения? а на счёт короче, это да, желательно иногда короче, но в твоём примере, будут в лог попадать ВСЕ файлы из цикла, вне зависимости от того, был ли удалён файл, или нет - зачем тогда лог нужен

     
    Изменить расширение "mp3" на другое, скажем "txt", вроде тоже не сложно
    А в лог будут попадать именно удалённые файлы, а не все подряд, мы ведь удаляем по расширению, соответсвенно, если удаляем *.mp3, то в лог будет записано примерно так: ""C:\Test\musik.mp3" и т.д.
     
    Добавлено:
    Smitis
    Блин! Оказывается так просто, спасибо, здорово выручил!

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:23 09-03-2007
    ViSiToR



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

    Цитата:
    в лог будут попадать именно удалённые файлы, а не все подряд, мы ведь удаляем по расширению, соответсвенно, если удаляем *.mp3, то в лог будет записано примерно так: ""C:\Test\musik.mp3" и т.д.

    Нет, в лог попадают все файлы из цикла, проверь, убери строку с удалением...
     
    В этом примере нет проверки на то, удалился ли файл или нет, ведь если файл не будет удалён, как из лога будет удалена строка этого файла? ведь сначала идёт запись в лог, а потом удаление, а проверки нет .

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:17 09-03-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru