I’m trying to redirect all output (stdout + stderr) of a Windows command to a single file:
C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.
Is it possible, or should I just redirect to two separate files?
Mofi
46.4k17 gold badges81 silver badges145 bronze badges
asked Sep 14, 2009 at 11:20
ripper234ripper234
223k276 gold badges635 silver badges905 bronze badges
2
You want:
dir > a.txt 2>&1
The syntax 2>&1
will redirect 2
(stderr) to 1
(stdout). You can also hide messages by redirecting to NUL
. More explanation and examples are on the Microsoft documentation page Redirecting error messages from Command Prompt: STDERR/STDOUT.
Mofi
46.4k17 gold badges81 silver badges145 bronze badges
answered Sep 14, 2009 at 11:23
Anders LindahlAnders Lindahl
41.7k9 gold badges90 silver badges93 bronze badges
7
Anders Lindahl’s answer is correct, but it should be noted that if you are redirecting stdout to a file and want to redirect stderr as well then you MUST ensure that 2>&1
is specified AFTER the 1>
redirect, otherwise it will not work.
REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
S.S. Anne
15.2k8 gold badges38 silver badges76 bronze badges
answered May 23, 2013 at 11:59
13
Background info from Microsoft documentation
While the accepted answer to this question is correct, it really doesn’t do much to explain why it works, and since the syntax is not immediately clear I did a quick www search to find out what was actually going on. In the hopes that this information is helpful to others, I’m posting it here.
Taken from the Microsoft documentation page:
Redirecting error messages from Command Prompt: STDERR/STDOUT
Summary
When redirecting output from an application using the
>
symbol, error messages still print to the screen. This is because error messages are often sent to the Standard Error stream instead of the Standard Out stream.Output from a console (Command Prompt) application or command is often sent to two separate streams. The regular output is sent to Standard Out (STDOUT) and the error messages are sent to Standard Error (STDERR). When you redirect console output using the
>
symbol, you are only redirecting STDOUT. In order to redirect STDERR, you have to specify2>
for the redirection symbol. This selects the second output stream that is STDERR.Example
The command
dir file.xxx
(where file.xxx does not exist) will display the following output:Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not FoundIf you redirect the output to the NUL device using
dir file.xxx > nul
, you will still see the error message:File Not Found
To redirect the error message to NUL, use the following command:
dir file.xxx 2> nul
Or, you can redirect the output to one place, and the errors to another.
dir file.xxx > output.msg 2> output.err
You can print the errors and standard output to a single file by using the
&1
command to redirect the output for STDERR to STDOUT and then sending the output from STDOUT to a file:dir file.xxx 1> output.msg 2>&1
bzeaman
1,12811 silver badges28 bronze badges
answered Oct 18, 2013 at 18:57
StormeHawkeStormeHawke
5,9875 gold badges45 silver badges74 bronze badges
To add the stdout and stderr to the general logfile of a script:
dir >> a.txt 2>&1
answered Jul 24, 2013 at 10:16
1
Correct, file handle 1 for the process is STDOUT, redirected by the 1>
or by >
(1 can be omitted, by convention, the command interpreter [cmd.exe] knows to handle that).
File handle 2 is STDERR, redirected by 2>
.
Note that if you’re using these to make log files, then unless you’re sending the outut to _uniquely_named_ (eg date-and-time-stamped) log files, then if you run the same process twice, the redirected will overwrite (replace) the previous log file.
The >>
(for either STDOUT or STDERR) will APPEND not REPLACE the file. So you get a cumulative logfile, showwing the results from all runs of the process — typically more useful.
Happy trails…
falsetru
358k63 gold badges735 silver badges638 bronze badges
answered Feb 6, 2014 at 4:28
There is, however, no guarantee that the output of SDTOUT
and STDERR
are interweaved line-by-line in timely order, using the POSIX
redirect merge syntax.
If an application uses buffered output, it may happen that the text of one stream is inserted in the other at a buffer boundary, which may appear in the middle of a text line.
A dedicated console output logger (I.e. the "StdOut/StdErr Logger"
by 'LoRd MuldeR'
) may be more reliable for such a task.
See: MuldeR’s OpenSource Projects
answered Feb 27, 2018 at 13:30
LigHLigH
511 silver badge4 bronze badges
In a batch file (Windows 7 and above) I found this method most reliable
Call :logging >"C:\Temp\NAME_Your_Log_File.txt" 2>&1
:logging
TITLE "Logging Commands"
ECHO "Read this output in your log file"
ECHO ..
Prompt $_
COLOR 0F
Obviously, use whatever commands you want and the output will be directed to the text file.
Using this method is reliable HOWEVER there is NO output on the screen.
answered Sep 12, 2019 at 20:12
1
Время на прочтение
4 мин
Количество просмотров 78K
Очень часто приходилось слышать такое от людей, которые много времени проводят за администрированием и другими IT-забавами.
Я, за не очень долгий опыт реального администрирования пришел к обратному выводу. В консоли (командной строке) В Windows можно выполнять очень много разных операций, которые стандартными возможностями не выполняются или выполняются некорректно/неудобно/долго (нужное подчеркнуть)
Совсем недавно где-то на Хабре промелькнуло высказывание из серии «Не думал, что консоль в Виндах что-то может. Хотелось бы узнать об этом побольше».
Вот так и возникло желание написать небольшую статью про основные возможности консоли.
Про самые стандартные команды консоли можно узнать тривиальным способом:
заходим в cmd и пишем:
help
В сообщении я не буду подробно рассматривать команды типа copy (т.е. совсем тривиальные) так как о них можно прочитать введя команду типа
copy /?
1. Ввод-вывод
Рассмотреть же я попытаюсь команды, которые в основном хэлпе не написаны или описаны недостаточно подробно.
Для начала хотелось бы написать про операторы перенаправления ввода-вывода.
Таковыми операторами являются >, >>, <
.
Они нам могут пригодиться как минимум в трех ситуациях:
- Просмотр логов бат-файла
- Чтение длинных хелпов по консольным утилитам
- Подхватывание каких-либо переменных из лежащего рядом файла
При желании примеров можно придумать сколько угодно.
Из командной строки эти возможности реализуются следующим образом. Для того, чтобы перенаправить текстовые сообщения, выводимые какой-либо командой, в текстовый файл, нужно использовать конструкцию
команда > имя_файла
Если при этом заданный для вывода файл уже существовал, то он перезаписывается (старое содержимое теряется), если не существовал — создается. Можно также не создавать файл заново, а дописывать информацию, выводимую командой, в конец существующего файла. Для этого команда перенаправления вывода должна быть задана так:
команда >> имя_файла
С помощью символа < можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла:
команда < имя_файла
Приведем несколько примеров перенаправления ввода/вывода.
1. Вывод встроенной справки для команды COPY в файл copy.txt:
COPY /? > copy.txt
2. Добавление текста справки для команды XCOPY в файл copy.txt:
XCOPY /? >> copy.txt
3. Ввод новой даты из файла date.txt (DATE — это команда для просмотра и изменения системной даты):
DATE < date.txt
2. FOR… DO
Второй командой, которую бы хотелось рассмотреть является FOR ... DO
Эта команда, так же как и многие другие достаточно подробно описана на сайте WindowsFAQ.
Я же хочу остановиться на двух наиболее важных пунктах
2.1 Переменные
- %~I
Расширение %I, которое удаляет окружающие кавычки («»). - %~fI
Расширение %I до полного имени пути. - %~dI
Замена %I именем диска. - %~pI
Замена %I на путь. - %~nI
Замена %I одним именем файла. - %~xI
Замена %I расширением имени файла. - %~sI
Замена путем, содержащим только короткие имена. - %~aI
Замена %I атрибутами файла. - %~tI
Замена %I временем модификации файла. - %~zI
Замена %I размером файла. - %~$PATH:I
Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.
Очевидно, что с помощью такого широкого набора переменных мы можем практически полностью отвязаться от индивидуальных особенностей конкретного экземпляра операционной системы и => избежать проблем например из-за того, что система встала на диск E:, а не на C:.
2.2 Работа с файлами
Чтобы произвести разбор файла, игнорируя комментарии, можно использовать следующую команду:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми и/или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, «ИмяФайла»). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора.
Переменная %i объявлена явно в инструкции FOR, а %j и %k объявлены неявно с помощью tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы «z» или «Z».
Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду:
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
В данном примере перечисляются имена переменных среды в текущем окружении.
Пофантазируем?..
Итак, что нам дают всего эти две команды?
Ну вот возьмем для примера утилиту, которая лежит на сайте Microsoft и называется psexec. Она позволяет нам, зная логин и пароль машины, подключиться к ней и выполнить произвольные действия
в консольном режиме
Допустим, что у нас есть домен Windows и пароль доменного администратора.
Нам нужно подключиться ко всем машинам и удалить все файлы с маской *.mp3 с диска C:.
Для начала — как получить список всех компьютеров сети.
Я это делаю так:
FOR /F "skip=3 delims=\ " %%A IN ('NET VIEW') DO ECHO %%A>>c:\comps.txt
Имеем список всех компов в сети в столбик — как раз в том формате, который принимает psexec.
Правда, будут проблемы с русскими названиями компов, но это ведь не актуальная проблема, да?
Теперь про PsExec. Скачать его можно тут.
Синтаксис описан там же.
Нас интересует вот какая команда
c:\psexec.exe @c:\comps.txt -u username -p password -c MP3DELETE.bat
Содержимое .bat — файла:
cd /d c:\
for /r %%p in (*.mp3) do del %%p
Само собой, задача чисто абстрактная. Мне просто хотелось показать, что консоль в Windows на самом деле весьма могуча и позволяет красиво и удобно решать многие задачи.
А уж как здорово одним нажатием на bat-ник устанавливать пользователям софт в unattended-режиме…
Спасибо за внимание! Жду критики и предложений…
UPD.1 Спасибо большое maxshopen за инвайт и первую карму!
Благодаря ему и всем плюсующим с радостью перенес свою первую статью в свой первый блог — Windows.
UPD.2 Спасибо, Hint
copy con file.txt
Перенаправляет вывод с клавиатуры в файл (CTRL+Z — завершение ввода).
type file.txt >prn
Печает на принтере file.txt
UPD.3 Дамы и Господа!
Осознал, что можно на эту тему еще писать и писать.
У кого-нибудь есть какие-нибудь конкретные пожелания?
Или мне самому тему придумать?
Если пожелания есть, то пишите в кАментах.
I’m trying to redirect all output (stdout + stderr) of a Windows command to a single file:
C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.
Is it possible, or should I just redirect to two separate files?
Mofi
46.4k17 gold badges81 silver badges145 bronze badges
asked Sep 14, 2009 at 11:20
ripper234ripper234
223k276 gold badges635 silver badges905 bronze badges
2
You want:
dir > a.txt 2>&1
The syntax 2>&1
will redirect 2
(stderr) to 1
(stdout). You can also hide messages by redirecting to NUL
. More explanation and examples are on the Microsoft documentation page Redirecting error messages from Command Prompt: STDERR/STDOUT.
Mofi
46.4k17 gold badges81 silver badges145 bronze badges
answered Sep 14, 2009 at 11:23
Anders LindahlAnders Lindahl
41.7k9 gold badges90 silver badges93 bronze badges
7
Anders Lindahl’s answer is correct, but it should be noted that if you are redirecting stdout to a file and want to redirect stderr as well then you MUST ensure that 2>&1
is specified AFTER the 1>
redirect, otherwise it will not work.
REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
S.S. Anne
15.2k8 gold badges38 silver badges76 bronze badges
answered May 23, 2013 at 11:59
13
Background info from Microsoft documentation
While the accepted answer to this question is correct, it really doesn’t do much to explain why it works, and since the syntax is not immediately clear I did a quick www search to find out what was actually going on. In the hopes that this information is helpful to others, I’m posting it here.
Taken from the Microsoft documentation page:
Redirecting error messages from Command Prompt: STDERR/STDOUT
Summary
When redirecting output from an application using the
>
symbol, error messages still print to the screen. This is because error messages are often sent to the Standard Error stream instead of the Standard Out stream.Output from a console (Command Prompt) application or command is often sent to two separate streams. The regular output is sent to Standard Out (STDOUT) and the error messages are sent to Standard Error (STDERR). When you redirect console output using the
>
symbol, you are only redirecting STDOUT. In order to redirect STDERR, you have to specify2>
for the redirection symbol. This selects the second output stream that is STDERR.Example
The command
dir file.xxx
(where file.xxx does not exist) will display the following output:Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not FoundIf you redirect the output to the NUL device using
dir file.xxx > nul
, you will still see the error message:File Not Found
To redirect the error message to NUL, use the following command:
dir file.xxx 2> nul
Or, you can redirect the output to one place, and the errors to another.
dir file.xxx > output.msg 2> output.err
You can print the errors and standard output to a single file by using the
&1
command to redirect the output for STDERR to STDOUT and then sending the output from STDOUT to a file:dir file.xxx 1> output.msg 2>&1
bzeaman
1,12811 silver badges28 bronze badges
answered Oct 18, 2013 at 18:57
StormeHawkeStormeHawke
5,9875 gold badges45 silver badges74 bronze badges
To add the stdout and stderr to the general logfile of a script:
dir >> a.txt 2>&1
answered Jul 24, 2013 at 10:16
1
Correct, file handle 1 for the process is STDOUT, redirected by the 1>
or by >
(1 can be omitted, by convention, the command interpreter [cmd.exe] knows to handle that).
File handle 2 is STDERR, redirected by 2>
.
Note that if you’re using these to make log files, then unless you’re sending the outut to _uniquely_named_ (eg date-and-time-stamped) log files, then if you run the same process twice, the redirected will overwrite (replace) the previous log file.
The >>
(for either STDOUT or STDERR) will APPEND not REPLACE the file. So you get a cumulative logfile, showwing the results from all runs of the process — typically more useful.
Happy trails…
falsetru
358k63 gold badges735 silver badges638 bronze badges
answered Feb 6, 2014 at 4:28
There is, however, no guarantee that the output of SDTOUT
and STDERR
are interweaved line-by-line in timely order, using the POSIX
redirect merge syntax.
If an application uses buffered output, it may happen that the text of one stream is inserted in the other at a buffer boundary, which may appear in the middle of a text line.
A dedicated console output logger (I.e. the "StdOut/StdErr Logger"
by 'LoRd MuldeR'
) may be more reliable for such a task.
See: MuldeR’s OpenSource Projects
answered Feb 27, 2018 at 13:30
LigHLigH
511 silver badge4 bronze badges
In a batch file (Windows 7 and above) I found this method most reliable
Call :logging >"C:\Temp\NAME_Your_Log_File.txt" 2>&1
:logging
TITLE "Logging Commands"
ECHO "Read this output in your log file"
ECHO ..
Prompt $_
COLOR 0F
Obviously, use whatever commands you want and the output will be directed to the text file.
Using this method is reliable HOWEVER there is NO output on the screen.
answered Sep 12, 2019 at 20:12
1
Windows 10, Windows 11, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP
- 15.11.2016
- 84 244
- 23
- 12.11.2022
- 60
- 56
- 4
- Содержание статьи
- Использование перенаправления выполнения команд
- Комментарии к статье ( 23 шт )
- Добавить комментарий
Командная строка — неизменный компонент любой операционной системы Windows, который берет свое происхождение прямиком от её предка — операционной системы MS-DOS. Данная программа имеет довольно широкие возможности, но сейчас мы поговорим о довольно примитивной вещи — сохранение (по факту — перенаправление) вывода командной строки в текстовый файл.
Почитать о том, как сделать тоже самое в Linux\BSD системах можно в этой статье.
Использование перенаправления выполнения команд
В случае, если необходимо просто сохранить все, что вывела командная строка в текстовый файл, то нужно после введенной команды добавить символ «>», что приведет к созданию текстового файла и весь вывод командной строки отправится туда. Пример:
ping 8.8.8.8 > C:\Logs\ping.txt
Обратите внимание, что командная строка при перенаправлении вывода может создать только текстовый файл, но не папку. Если вы введете несуществующий путь, то получите ошибку!
Как видно, командная строка не вывела никакого результата введенной команды на экран, но зато сохранила все в файл ping.txt. К сожалению, существуют ограничения перенаправления вывода, которые не позволяют одновременно отображать вывод и в окне командной строки, и сохранять их в текстовый файл. Однако, можно воспользоваться хитростью — сразу по завершению выполнения команды вывести содержимое текстового файла на экран с помощью команды type. Получится что-то следующее:
ping 8.8.8.8 > C:\Logs\ping.txt & type C:\Logs\ping.txt
Если требуется файл не записывать (существующий текстовый файл будет перезаписан), а дописывать (существующий текстовый файл будет дополнен), нужно вместо одного символа «>» использовать два — «>>».
ping 8.8.8.8 >> C:\Logs\ping.txt
В случае, если в текстовый файл нужно сохранить так же какой-то текст (например, в составе bat файла), то можно воспользоваться комбинацией с командой echo:
echo Имя компьютера: %computername% > C:\Logs\ping.txt
echo Проверка пинга до google.ru >> C:\Logs\ping.txt
ping google.ru >> C:\Logs\ping.txt
Содержимое получившегося текстового файла будет следующим:
Для того, чтобы вывод был только в текстовый файл (без показа в окне командной строки), нужно вставить первой строкой в bat файле команду @echo off
С помощью переназначения устройств ввода/вывода одна программа может направить свой вывод на вход другой или перехватить вывод другой программы, используя его в качестве своих входных данных. Таким образом, имеется возможность передавать информацию от процесса к процессу при минимальных программных издержках.
Есть 3 файловых дескриптора: stdin
— стандартный ввод, stdout
— стандартный вывод и stderr
— стандартный поток ошибок. В скриптах 1 означает stdout
, а 2 — stderr
.
Практически это означает, что для программ, которые используют стандартные входные и выходные устройства, операционная система позволяет:
- перенаправлять
stdout
в файл - перенаправлять
stderr
в файл - перенаправлять
stdout
вstderr
- перенаправлять
stderr
вstdout
- перенаправлять
stderr
иstdout
в файл - перенаправлять
stderr
иstdout
вstdout
- перенаправлять
stderr
иstdout
вstderr
- перенаправление
stderr
иstdout
по конвейеру
Все вышесказанное является привычной обыденностью для любого пользователя любой nix системы, но в среде Windows, данные возможности применяются крайне редко, хотя на самом деле они там есть и всё практически идентично.
А теперь примеры:
1. Перенаправление стандартного потока программы в файл с заменой содержимого файла
ping ya.ru -t > log.txt
ping ya.ru -t 1> log.txt
при этом на экран ничего кроме ошибок не выводится, а все записывается в лог. Если остановить пинг, и запустить заново, предыдущий лог полностью затирается новым.
2. Перенаправление стандартного потока программы в файл с до записью содержимого лога
ping ya.ru -t >> log.txt
Тоже самое, но при прерывание пинга и начале нового, старое содержимое лога не затрется, а новое дописывается в конец
ping ya.ru -t 1>> log.txt
3. Перенаправление потока ошибок программы в фаил с заменой содержимого
ping ya.ru -t 2> log.txt
при этом, стандартный поток программы пойдет на экран, а ошибки будут записаны в лог, с заменой содержимого.
4. То же самое, но с до записью содержимого лога.
ping ya.ru -t 2>> log.txt
5. Следующая конструкция позволяет перенаправить информацию между потоками (между стандартным потоком и потоком ошибок, или наоборот).
ping ya.ru > log.txt 2>&1
или с до записью лога
ping ya.ru >> log.txt 2>&1
В данном примере стандартный поток ошибок пересылается в стандартный поток (конструкция 2>&1
) а потом стандартный поток (уже с завернутым в него потоком ошибок) посылается в лог.
6. В этом примере все наоборот, стандартный поток, пересылается в поток ошибок и уже поток ошибок перенаправляется в лог:
ping ya.ru > log.txt 1>&2
или с до записью лога
ping ya.ru >> log.txt 1>&2
7. По аналогии с Linux системами в Windows можно перенаправить весь или часть вывода программы в виртуальное устройство, а проще говоря слить в мусор.
Таким устройством является nul, и делать перенаправление в него можно используя все выше представленные комбинации. Например
ping ya.ru > nul
В Linux есть еще одна конструкция перенаправления, а именно &>/var/log/log.txt
, она перенаправляет ВСЕ без исключения потоки программы в указанное место, по сути являясь более коротким и более грамотным аналогом конструкции >log.txt 1>&2
. Но к сожалению в Windows это не работает.
А теперь давайте немного разберемся в прикладных различиях между работой данных методов. В нормальных приложениях все разбито на потоки, но у большинства виндовых утилит это не так, пинг например, пишет все в стандартный поток (на экран), поэтому для него конструкция вида 2>
не имеет смысла. Но есть еще не виндовые утилиты, для примера возьмем curl
(мой любимый).
Он разделяет 3 вида вывода, вывод полезной информации, вывод служебной информации и вывод ошибок. Если перенаправить вывод так: >
или >>
или 1>
или 1>>
то по завершению запроса отобразится служебная информация о запросе, а вся полезная информация уйдет в лог (это именно то, что уходит по конвейеру |
).
А теперь сделаем заведомо ошибочный запрос, изменив протокол http
на http3
не меняя вывода в лог. В итоге мы получим ошибку на экране.
Изменим вывод в лог на один из этих: 2>
или 2>>
ошибка ранее выводившаяся на экран, попала в лог, и на экране ничего не будет (служебной информации нет, так как запрос произведен не был).
Вернемся к первому скриншоту на котором мы видим вывод служебной информации, по сути, не будь у курла ключа -s
который подавляет вывод служебной информации, нам пришлось бы пользоваться конструкциями из пятого и шестого примеров.
И вывод был бы таким:
То есть, полная тишина, вся информация, как то полезный вывод, ошибки программы, служебная информация, все ушло в лог.
На данном скриншоте, конструкцией 2>&1
мы завернули поток ошибок в стандартный поток, а конструкцией > 5555.txt
стандартный поток перенаправили в лог. Если вместо > 5555.txt
использовать 2> 5555.txt
, то есть перенаправить в лог стандартный поток ошибок, мы увидим весь вывод программы (и ошибки, и служебную информацию и полезный вывод) на экране. Конструкция 2>&1
имеет больший приоритет, а по ней уже все завернуто в стандартный поток.
Делать пример с заворотом стандартного потока в поток ошибок (1>&2
) я не буду, ибо там все точно так же.
Надеюсь логика понятна…
Так же с помощью символа <
можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла. Для примера возьмем реальный и вполне полезный случай. Например, у нас есть файл log.txt и нам надо посчитать сколько в нем строк. Сделать это можно с помощью такой конструкции
find /c /v "" log.txt
но вывод будет не совсем приемлемым.
А вот если сделать так:
find /c /v "" < log.txt
то все будет именно так как надо.
Это происходит потому что в первом случае, файл обрабатывается как файл, а во втором, как поток (аналог линуксового конвейера cat log.txt |
) в общем, <
это виндовый аналог cat
со всеми вытекающими.
Источник
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.