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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Okapulka
    Сохранить как *.cmd (это комбинированный cmd+js):
    Цитата:
    @set @x=0 /*
    @echo off
    for %%a in ("%~dp0.\*.mbs") do cscript //nologo /e:jscript "%~f0" "%%~fa"
    exit /b
    */
     
    var ForReading = 1, ForWriting = 2;
    var fso = new ActiveXObject("Scripting.FileSystemObject");
     
    var N = 1, MBS = WScript.Arguments(0), S = "", fo = null;
     
    var fi = fso.OpenTextFile(MBS, ForReading);
     
    while (!fi.AtEndOfStream)
    {
      S = fi.ReadLine();
      if (fo === null)
     {
        if (S.length == 0) continue;

        fo = fso.OpenTextFile(MBS.substr(0, MBS.length - 4) + "_" + parseInt(N) + ".txt", ForWriting, true);
     }
      fo.WriteLine(S);
     if (/^--.*--$/.test(S))
      {
        fo.close();
        fo = null;
        N++;
      }
    }
    fi.close();
     

    Всего записей: 10018 | Зарегистр. 11-03-2002 | Отправлено: 10:54 10-11-2016 | Исправлено: Pasha_ZZZ, 16:37 11-11-2016
    Linksach



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

    Всего записей: 92 | Зарегистр. 11-07-2015 | Отправлено: 22:48 10-11-2016 | Исправлено: Linksach, 23:23 10-11-2016
    BorlandIMHO

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Код проверен и он работает. Специально скопипастил из поста и проверил.
    Да, это не окончательное решение {толком так и не} поставленной задачи, но пример того, как информация о сжатом и несжатом размерах файла извлекается непосредственно из архива при помощи 7-zip.
    Имя файла вполне можно в цикле подставлять через переменную, но чтобы скрипт обходил все папки автоматически нужно иметь хоть какое-то представление об их содержимом...
    Если в архиве всегда один файл, причём имя файла совпадает с именем архива, то проще даже будет раскидать по подпапкам архивы, сваленные кучей в одной папке...
    Если архивы уже разложены по подпапкам - то нужно знать, может ли в подпапках находиться некий "мусор" (лишние файлы, которые обрабатывать не надо) и что это за мусор. Конкретно.
    И что конкретно у вас "не работает"? Единственная причина, которую я могу представить - это недоступность 7-zip для скрипта...

    ----------
    http://www.imho.ws

    Всего записей: 1221 | Зарегистр. 12-10-2006 | Отправлено: 00:07 11-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    вот  
    http://hkar.ru/M27F
    http://hkar.ru/M27G
    http://hkar.ru/M27H
    Запускаю батник в папке или вне папки и ничего не происходит,пути прописаны в переменную среды
    в разных вариантах(исправил)
    C:\Program Files\7-Zip\7z;C:\Program Files\7-Zip;

    Всего записей: 92 | Зарегистр. 11-07-2015 | Отправлено: 00:55 11-11-2016 | Исправлено: Linksach, 01:17 11-11-2016
    GCRaistlin



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

    Цитата:
    пути прописаны в переменную среды
    в разных вариантах
    C:\7-Zip\7z;C:\7-Zip\7z.exe;C:\7-Zip;

    Экзешники в PATH - это пять, однозначно. Уж не говоря про то, что 7-Zip у вас установлен вовсе не в C:\7-Zip.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3052 | Зарегистр. 18-04-2005 | Отправлено: 01:02 11-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    ну да каюсь не доглядел
     
    Добавлено:
    исправил пути и всё равно не работает

    Всего записей: 92 | Зарегистр. 11-07-2015 | Отправлено: 01:05 11-11-2016 | Исправлено: Linksach, 01:16 11-11-2016
    GCRaistlin



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

    ----------
    Magically yours
    Raistlin

    Всего записей: 3052 | Зарегистр. 18-04-2005 | Отправлено: 01:28 11-11-2016
    Okapulka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    Цитата:
    комбинированный cmd+js
    Создаётся множество выходных файлов, больше чем должно быть, много коротких, с отрывками писем типа
    Код:
    div.feedEntryLinks li
    {
     

    Код:
        font-size: 100%;
        font-style: italic;
        font-weight: normal;
        margin: 0;
        padding: 0;
    }
     
    То есть часть писем мелко нарублена.

    Всего записей: 121 | Зарегистр. 14-05-2016 | Отправлено: 03:06 11-11-2016
    NIKZZZZ



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

    Код:
    @echo off
    set dirs=%~dp0
     
    cd /d "%dirs%"
     
    for /f "delims=" %%f in ('dir /b /a:-d *.mbs') do call :Split "%%f"
    echo **** Задание выполнено ****
    >nul pause
    goto :eof
     
    :Split
      set $n=0
      set dlm="------------*--"
      for /f "tokens=1,* delims=]" %%a in ('find  /v /n "" "%~1" ') do (
        set xx="%%b"
        call :_out "%~1"
      )
    goto :eof  
     
    :_out
      if %dlm%=="------------*--" goto :_1
      if "%xx:"=%"=="" (>>"%outfile%" echo.) else (for /f "delims=" %%s in (%xx%) do >>"%outfile%" echo.%%s)  
      set dlm=%xx:~0,13%*%xx:~-3%
      set dlm="%dlm:"=%"
    goto :eof  
      :_1
      set /a $n+=1
      set outfile=%~n1_%$n%.txt
      2>"%outfile%" set dlm=""
      cls
      echo Обработка письма %~nx1 [%$n%]
    goto :eof

     
    Конечно, решать подобные задачи батником не оптимально, но люди и большие глупости творят, например разгадывая кроссворды.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 06:55 11-11-2016 | Исправлено: NIKZZZZ, 16:53 11-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    C:\Program Files\7-Zip\7z;C:\Program Files\7-Zip;

    Всего записей: 92 | Зарегистр. 11-07-2015 | Отправлено: 07:51 11-11-2016
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Первый уберите - у вас же не существует такого пути.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3052 | Зарегистр. 18-04-2005 | Отправлено: 09:06 11-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Okapulka
    Цитата:
    Создаётся множество выходных файлов, больше чем должно быть, много коротких, с отрывками писем
    Был такой косяк, когда длина строки = 1 символу.
    Сделал поиск регуляркой, измененную строку выделил в оригинальном сообщении.

    Всего записей: 10018 | Зарегистр. 11-03-2002 | Отправлено: 11:20 11-11-2016
    Okapulka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Цитата:
    Конечно, решать подобные задачи батником не оптимально
    Теперь-то я об этом знаю. Неопытная была, думала задачка плёвая, раз-два и готово. Не тут-то было.
    Последний вариант — сообщение: "Непредвиденное появление: HTML." и создаётся один выходной файл с обрывком письма. Спотыкается на строке
    Код:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

     
    Pasha_ZZZ
    Теперь почти то, что нужно. В выходных файлах, начиная с "%имя%_2.txt" и далее по счёту, первые строки пустые. Их быть не должно.

    Всего записей: 121 | Зарегистр. 14-05-2016 | Отправлено: 15:52 11-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Okapulka
    Этого не было в задаче. Значит в исходном файле между концом --    -- и From есть пустая строка.
    Текстовый файл закрывается строкой с дефисами, следующая строка - начало нового файла.
     
    Нужны уточнения по пунктам:
  • между --    -- и From точно пустые строки или могут быть непустые (даже из одного/нескольких пробелов)?
  • надо ли учитывать пробелы в принципе в началах/концах строк?
     
    Добавлено:
    Выделил в оригинале синим строки, которые нужно вставить, чтобы пустые строки после конца письма пропускались.

  • Всего записей: 10018 | Зарегистр. 11-03-2002 | Отправлено: 16:31 11-11-2016
    Okapulka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    А вот и было.
    06:14 09-11-2016
    Цитата:
    После последней строки каждого письма идёт пустая строка, после неё и надо резать. В итоге должны получится файлы, в которых первая строка начинается с "From  ", а последняя строка пустая.

     
  • Между --    -- и From точно пустые строки.
  • Не уверена, может и не нужно, надо проверить.

  • Всего записей: 121 | Зарегистр. 14-05-2016 | Отправлено: 16:49 11-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Okapulka
    Ну сейчас пустые строки совсем отсутствуют, и в концах писем, и в началах... можно и добавить, при определеном желании.
     
    Добавлено:
    А не, все правильно, последняя строка в файл записывается через WriteLine - значит в конце каждого файла с письмом добавлена пустая строка

    Всего записей: 10018 | Зарегистр. 11-03-2002 | Отправлено: 16:56 11-11-2016
    NIKZZZZ



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

    Цитата:
    Последний вариант — сообщение: "Непредвиденное появление: HTML." и создаётся один выходной файл с обрывком письма. Спотыкается на строке  

    Поправил скрипт.
    Задачка просто интересная, сделать что-то не стандартными средствами, так она решается за несколько минут, да и опыт лишним не будет.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:04 11-11-2016 | Исправлено: NIKZZZZ, 17:06 11-11-2016
    Okapulka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    Ура-ура! Теперь всё чудесно!
    Да, пустые строки в конце есть, так и надо.
    Спасибо большое!
     
     
     
    Добавлено:
    NIKZZZZ
    Теперь такая картина на девятом письме, восемь вроде нормально создались.

    Код:
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    Не удается найти файл ?¶X&#8616;clи¶и¶*>".
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    Непредвиденное появление: {n.style.display.

    Спасибо, в принципе задача решена, можно дальше не заморачиваться. Разве только из интереса.
     
    Добавлено:

    Цитата:
    восемь вроде нормально создались
    ...не совсем, пропало выделенное красным из урл-ов
    Код:
    <base href="http://site.com/forum/index.php?action=.xml;board=9;type=rss">

    Всего записей: 121 | Зарегистр. 14-05-2016 | Отправлено: 17:05 11-11-2016 | Исправлено: Okapulka, 18:18 11-11-2016
    BorlandIMHO

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Задача озаглавлена "разгребаем помойку".    
    GarbageSorter.cmd
    Код:
    set "GARBAGE=x:\path to\Garbage"
    set "SORTEDGARBAGE=y:\another path to\SortedGarbage"
     
    pushd "%SORTEDGARBAGE%" && popd ||exit
    pushd "%GARBAGE%" ||exit
    for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N"
    popd
    goto :EOF
     
    :PROCESSIT
     
    for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do (
    set /a COMPRESSEDSIZE=%%B
    set /a UNCOMPRESSEDSIZE=%%A
    )
    md "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)"
    move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\"
    goto :EOF

    Первые две команды задают пути к помойке (месту, где валяются архивы; предполагается, что кроме архивов там больше нет ничего) и сортированной помойке (папке, в которой создаются подпапки с именами, содержащими размеры, в которые, в свою очередь, перемещаются файлы с помойки).
    Таки да, напоминаю: к переменной окружения "PATH" необходимо добавить путь к 7z.exe (";c:\Program files\7-zip" в конце строки, без кавычек, в предположении что 7-zip установлен по стандартному пути).
    Проверено на тестовой помойке из ~250 архивов. Работает...
     
     
    (более поздний вариант; с "защитой от дурака" и обработкой ошибок)
    GarbageSorter2.cmd
    Код:
    @echo off
    1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!"
    set "GARBAGE=x:\path to\Garbage"
    set "SORTEDGARBAGE=y:\another path to\SortedGarbage"
     
    1>nul 2>&1 pushd "%SORTEDGARBAGE%" && popd ||call :ABORT "Папка "%SORTEDGARBAGE%" не существует!"
    1>nul 2>&1 pushd "%GARBAGE%" ||call :ABORT "Папка "%GARBAGE%" не существует!"
    for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N"
    set "GARBAGE="
    set "SORTEDGARBAGE="
    popd
    goto :EOF
     
    :PROCESSIT
     
    for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do (
    set /a COMPRESSEDSIZE=%%B
    set /a UNCOMPRESSEDSIZE=%%A
    )
    md "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)"||call :ABORT "Невозможно создать папку %SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)!"
    move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\"||call :ABORT "Невозможно переместить %~1 в %SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)!"
    set COMPRESSEDSIZE=
    set UNCOMPRESSEDSIZE=
    goto :EOF  
     
    :ABORT
    echo Аварийное завершение работы!
    echo %~1
    pause
    exit

     
     
    (вариант в полпятого утра    с пересчётом в кило, мега- и гигабайты)
    GarbageSorter3.cmd
    Код:
    @echo off
    1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!"
    set "GARBAGE=x:\path to\Garbage"
    set "SORTEDGARBAGE=y:\another path to\SortedGarbage"
     
    1>nul 2>&1 pushd "%SORTEDGARBAGE%" && popd ||call :ABORT "Папка "%SORTEDGARBAGE%" не существует!"
    1>nul 2>&1 pushd "%GARBAGE%" ||call :ABORT "Папка "%GARBAGE%" не существует!"
    for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N"
    popd
    goto :EOF
     
    :PROCESSIT
     
    for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do (
    set /a COMPRESSEDSIZE=%%B
    set /a UNCOMPRESSEDSIZE=%%A
    )
    setlocal ENABLEDELAYEDEXPANSION
    call :RECALC COMPRESSEDSIZE
    call :RECALC UNCOMPRESSEDSIZE
    md "%SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)"||call :ABORT "Невозможно создать %SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)!"
    move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\"||call :ABORT "Невозможно переместить %~1 в %SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)!"
    endlocal
    goto :EOF  
     
    :ABORT
    echo Аварийное завершение работы!
    echo %~1
    pause
    exit
     
    :RECALC
    call set /a TEMPVAR=%%%1%%
    if %TEMPVAR% LSS 1024 (
        set "%1=!TEMPVAR!b"
    ) else if %TEMPVAR% LSS 1048576 (
        for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1024^)') do set /a RESULT=%%X
        set "%1=!RESULT:~0,-2!.!RESULT:~-2!kb"
    ) else if %TEMPVAR% LSS 1073741824 (
        for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1048576^)') do set /a RESULT=%%X
        set "%1=!RESULT:~0,-2!.!RESULT:~-2!Mb"
    ) else if %TEMPVAR% LSS 1099511627776 (
        for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1073741824^)') do set /a RESULT=%%X
        set "%1=!RESULT:~0,-2!.!RESULT:~-2!Gb"
    ) else (for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1099511627776^)') do set /a RESULT=%%X
        set "%1=!RESULT:~0,-2!.!RESULT:~-2!Tb"
    )
    goto :EOF
    Для пересчёта используется утилита Command Line Calculator.
    Предполагается, что она лежит в папке "c:\Utils", если у вас в другом месте - измените путь.
    P.S. Код довольно кривой, но, в принципе, рабочий. Если профи помогут с правильной расстановкой % и ! (используется ENABLEDELAYEDEXPANSION) - будет совсем неплохо.  

    ----------
    http://www.imho.ws

    Всего записей: 1221 | Зарегистр. 12-10-2006 | Отправлено: 23:26 12-11-2016 | Исправлено: BorlandIMHO, 12:12 13-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер!
    есть такие текстовые файлы 1
    и 2
    Как видно - строки в текстовых документах посортированы по названиях  
    Задача посортировать по числам расположенным в столбце,т.е поссортировать по убыванию скорости видеокарт-от большей к меньшей
    Благодарю! можно код  через sed
    Добавлено:
    BorlandIMHO
     
    я извиняюсь,спасибо вам большое за проделанную работу ,но пока ваши коды я не пробовал

    Всего записей: 92 | Зарегистр. 11-07-2015 | Отправлено: 18:34 14-11-2016 | Исправлено: Linksach, 18:49 14-11-2016
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru