Quantcast
Channel: uzverss
Viewing all 435 articles
Browse latest View live

Работа с сетью в командной строке Windows (CMD) часть 1

$
0
0


Большинство рассматриваемых сетевых утилит для полноценной работы
требуют наличия административных привилегий. Для операционных систем
семейства Windows 2000/XP достаточно того, чтобы пользователь работал под учетной
записью члена группы администраторов. Интерпретатор командной строки
cmd.exeможно запустить с использованием меню Пуск - Выполнить - cmd.exe.
В среде операционных систем Widows Vista/Windows 7 интерпретатор
cmd.exe должен быть запущен для выполнения с использованием пункта контекстного
меню "Запустить от имени администратора". Командные файлы, в которых используются
сетевые утилиты, также должны выполняться в контексте учетной записи с привилегиями
администратора.



В списке представлены сетевые утилиты командной строки для получения
информации о сетевых настройках, выполнения операций по
конфигурированию и диагностике сети.


В описании команд используется


< текст > - текст в угловых скобках. Обязательный параметр

[ текст ] - текст в квадратных скобках. Необязательный параметр.

( текст ) - текст в круглых скобках. Необходимо выбрать один из параметров.

Вертикальная черта | - разделитель для взаимоисключающих параметров. Нужно выбрать один из них.

Многоточие ... - возможно повторение параметров.



Краткое описание и примеры использования сетевых утилит командной строки
Windows:


ARP

IPCONFIG

GETMAC

NBTSTAT

NETSH

NETSTAT

NET

NSLOOKUP

PATHPING

PING

ROUTE

TELNET

TRACERT

Примеры практического использования.



Утилита ARP.EXE



   
Утилита командной строки ARP.EXE присутствует во всех версиях Windows и имеет один и тот же синтаксис.

Команда
ARPпозволяет просматривать и изменять записи в кэш ARP (Address Resolution Protocol - протокол разрешения адресов), который представляет собой таблицу соответствия IP-адресов аппаратным адресам сетевых устройств. Аппаратный адрес - это уникальный, присвоенный при изготовлении, 6-байтный адрес сетевого устройства, например сетевой карты. Этот адрес также
часто называют MAC-адресом (Media Access Control - управление доступом к среде) или Ethernet-адресом. В сетях Ethernet передаваемые и принимаемые данные всегда содержат MAC-адрес источника (Source MAC) и MAC-адрес приемника (Destination MAC). Два старших бита MAC-адреса используются для идентификации типа адреса:


- первый бит - одиночный (0) или групповой (1) адрес.

- второй бит - признак универсального (0) или локально администрируемого (1) адреса.


Следующие 22 бита адреса содержат специальный код производителя MFGили OUI - универсальный код организации.



Другими словами, любое сетевое устройство имеет аппаратный адрес, состоящий из 2- х частей. Старшую часть MAC - адреса, централизованно выделяемую по лицензии каждому производителю сетевого оборудования. Например, 00:E0:4C - для сетевых устройств REALTEK SEMICONDUCTOR CORP. Крупным производителям сетевого оборудования обычно принадлежит несколько диапазонов OUI . И младшую часть MAC-адреса, которая формируется при производстве оборудования, и уникальна для каждого экземпляра устройства.


Отображение IP-адресов (формируемых программным путем), в аппаратные адреса, выполняется с помощью следующих действий:


- в сеть отправляется широковещательный запрос (ARP-request), принимаемый всеми сетевыми устройствами. Он содержит IP и Ethernet адреса отправителя, а также, целевой IP-адрес, для которого выполняется определение MAC-адреса.

- каждое устройство, принявшее запрос проверяет соответствие целевого IP-адреса, указанного в запросе, своему собственному IP-адресу. При совпадении, отправителю передается ARP-ответ (ARP-Reply), в котором содержатся IP и MAC адреса ответившего узла. Кадр с ARP-ответом содержит IP и MAC адреса как отправителя, так и получателя-составителя запроса.

- информация, полученная в ARP-ответе, заносится в ARP-кэш и может использоваться для обмена данными по IP-протоколу для данного узла. ARP-кэш представляет собой таблицу в оперативной памяти, каждая запись в которой содержит IP, MAC и возраст их разрешения. Возраст записи учитывается для того, чтобы обеспечить возможность повторного выполнения процедуры ARP при каком либо изменении соответствия адресов.


Синтаксис ARP.EXE:



arp[-a [InetAddr] [-NIfaceAddr]] [-g [InetAddr] [-NIfaceAddr]] [-dInetAddr [IfaceAddr]] [-sInetAddr EtherAddr [IfaceAddr]]



-a[ InetAddr] [ -NIfaceAddr] - ключ -a - отображает текущую таблицу ARP для всех интерфейсов. Для отображения записи конкретного IP-адреса используется ключ -aс параметром InetAdd , в качестве которого указывается IP-адрес. Если узел, отправляющий ARP-запрос имеет несколько сетевых интерфейсов, то для отображения таблицы ARP
нужного интерфейса, можно использовать ключ -N с параметром IfaceAddr, в качестве которого используется IP-адрес интерфейса.

-g[ InetAddr] [ -NIfaceAddr] ключ -g идентичен ключу -a.


-d InetAddr[ IfaceAddr] - используется для удаления записей из ARP-кэш. Возможно удаление по выбранному IP или полная очистка ARP кэш. Для удаления всех записей, вместо адреса используется символ *Если имеется несколько сетевых интерфейсов, то очистку можно выполнить для одного из них, указав в поле IfaceAddr его IP .



-s InetAddr EtherAddr [ IfaceAddr] - используется для добавления статических записей в таблицу ARP. Статические записи хранятся в ARP-кэш постоянно. Обычно, добавление статических записей используется для сетевых устройств, не поддерживающих протокол ARP или не имеющих возможности ответить на ARP- запрос.


/? - получение справки по использованию arp.exe. Аналогично - запуск arp.exe без параметров.



Примеры использования ARP:


arp -a - отобразить все записи таблицы ARP.


arp -a 192.168.0.9 - отобразить запись, соответствующую IP-адресу 192.168.0.9


arp -a 192.168.1.158 -N 192.168.1.1 - отобразить таблицу ARP для адреса 192.168.1.158 на сетевом интерфейсе 192.168.1.1


arp -a -N 10.164.250.148 - отобразить все записи таблицы ARP на сетевом интерфейсе 10.164.250.148 .


arp -s 192.168.0.1 00-22-15-15-88-15 - добавить в таблицу ARP статическую запись, задающую соответствие IP - адреса 192.168.0.1 и MAC-адреса 00-22-15-15-88-15


arp -s 192.168.0.1 00-22-15-15-88-15 192.168.0.56 - то же самое, что и в предыдущем случае, но с указанием сетевого интерфейса, для которого выполняется добавление статической записи.


arp -d 192.168.1.1 192.168.1.56 удаление записи из таблицы ARP для IP-адреса 192.168.1.1 на сетевом интерфейсе 192.168.1.56


arp -d * - полная очистка таблицы ARP. Аналогично - arp -d без параметров. Если имеется несколько сетевых интерфейсов, то очистка может быть выполнена только для одного из них - arp -d * 192.168.0.56.


   
Некоторые замечания по практическому использованию команды ARP:


- разрешение адресов по протоколу ARP выполняется только при операциях передачиданных по протоколу IP .

- время жизни записей в таблице ARP ограничено, поэтому, перед просмотром ее содержимого для конкретного адреса нужно выполнить ping на этот адрес.

- если ответ на ping не приходит, а запись для данного IP-адреса присутствует в таблице ARP, то этот факт можно интерпретировать как блокировку ICMP-пакетов брандмауэром пингуемого узла.

- невозможность подключения к удаленному узлу по протоколам TCP или UDP при наличии записей в таблице ARP для целевого IP, может служить признаком отсутствия служб обрабатывающих входящие подключения, или их блокировки брандмауэром (закрытые порты).

- ARP протокол работает в пределах локального сегмента сети. Поэтому, если выполнить ping на внешний узел ( например ping yandex.ru ), то в таблице ARP будет присутствовать запись для IP - адреса маршрутизатора, через который выполняется отправка пакета во внешнюю сеть.



При использовании команды ARP для отображения таблицы, не помещающейся на экране, удобно пользоваться командой постраничного вывода moreили перенаправлением стандартного вывода в файл:

arp -a | more

arp -a > C:\myarp.txt




Утилита IPCONFIG .



   
Утилита командной строки IPCONFIG присутствует во всех версиях Windows. Некоторые параметры командной строки не поддерживаются в версиях предшествующих Windows Vista/Windows 7


Команда IPCONFIG используется для отображения текущих настроек протокола TCP/IP и для обновления некоторых параметров, задаваемых при автоматическом конфигурировании сетевых интерфейсов при использовании протокола Dynamic Host Configuration Protocol (DHCP).



Синтаксис:



ipconfig [/allcompartments] [/all] [/renew[Adapter]] [/release[Adapter]] [/renew6[Adapter]] [/release6[Adapter]] [/flushdns] [/displaydns] [/registerdns] [/showclassidAdapter] [/setclassidAdapter [ClassID]]


Параметры:


/? - отобразить справку по использованию IPCONFIG


/all - отобразить полную конфигурацию настроек TCP/IP для всех сетевых адаптеров. Отображение выполняется как для физических интерфейсов, так и для логических, как например, dialup или VPN подключения.


/allcompartments - вывести полную информацию о конфигурации TCP/IP для всех секций. Применимо для Windows Vista/Windows 7 .


/displaydns - отобразить содержимое кэш службы DNS - клиент.


/flushdns - сбросить содержимое кэш службы DNS - клиент.


/registerdns - инициировать регистрацию записей ресурсов DNS для всех адаптеров данного
компьютера. Этот параметр используется для изменения настроек DNS сетевых подключений без перезагрузки компьютера.


/release[Adapter] - используется для отмены автоматических настроек сетевого адаптера, полученных от сервера DHCP. Если имя адаптера не указано, то отмена настроек выполняется для всех адаптеров.


/release6[Adapter] - отмена автоматических настроек для протокола IPv6


/renew[Adapter] - обновить конфигурацию для сетевого адаптера настроенного на получение настроек от сервера DHCP. Если имя адаптера не указано, то обновление выполняется для всех адаптеров.


/renew6[Adapter] - как и в предыдущем случае, но для протокола IPv6


/showclassid Adapter и /setclassid Adapter[ ClassID] - эти параметры применимы для Windows Vista / Windows 7 и используются для просмотра или изменения идентификатора Class ID, если он получен от DHCP - сервера при конфигурировании сетевых настроек.


   
Изменение сетевых настроек с помощью команды IPCONFIG, в основном, применимо к тем сетевым адаптерам, которые настроены на автоматическое конфигурирование с использованием службы динамической настройки основных параметров на сетевом уровне DHCP (Dynamic Host Configuration Protocol) или службы автоматической настройки приватных IP - адресов APIPA (Automatic Private IP Addressing) .


Если в параметрах командной строки IPCONFIG используется имя адаптера, содержащее пробелы, то оно должно заключаться в двойные кавычки. Если имя содержит символы русского алфавита, то оно должно быть представлено в DOS-кодировке.


Для имен адаптеров применимо использование символа * в качестве шаблона:


* - любое имя

Локальн* - имя адаптера начинается с "Локальн "

* сети * - имя адаптера содержит строку "сети "


Примеры использования:


ipconfig - отобразить базовые сетевые настройки для всех сетевых адаптеров. BR>

ipconfig /all - отобразить все сетевые настройки для всех сетевых адаптеров.


ipconfig /renew "Подключение по локальной сети 2" - обновить сетевые настройки, полученные от DHCP - сервера только для адаптера с именем "Подключение по локальной сети 2"


ipconfig /dysplaydns - вывести на экран содержимое кэш службы разрешения имен DNS


ipconfig /showclassid "Подключение по локальной сети" - отобразить все допустимые для этого адаптера идентификаторы классов DHCP.


ipconfig /setclassid "Local Area Connection" TEST - установить для адаптера с именем "Local Area Connection"идентификатор класса DHCP "TEST". Если идентификатор класса DHCP не указан, то он будет удален.


Пример отображаемой конфигурации сетевого адаптера :



Ethernet adapter Подключение по локальной сети :
- имя адаптера



DNS-суффикс подключения . . . . . :
- DNS-суффикс из настроек сетевого подключения


Описание. . . . . . . . . . . . . : Realtek 8139d Adapter #2
- описание адаптера.


Физический адрес. . . . . . . . . : 00-14-02-7B-ED-67
- MAC- адрес данного адаптера.



DHCP включен. . . . . . . . . . . : Да
- признак использования DHCP для конфигурирования сетевого адаптера


Автонастройка включена. . . . . . : Да
- признак автоматической настройки параметров адаптера с использованием функции автоматического назначения адресов (APIPA) при отсутствии сервера DHCP. Режим определяется значением ключа реестра

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\GUID адаптера\IPAutoconfigurationEnabled

Значение 0 (тип DWORD) параметра IPAutoconfigurationEnabled отключает APIPA. Если значение этого параметра равно 1 , или параметр отсутствует в реестре, APIPA активируется.




Автонастройка IPv4-адреса . . . . : 169.254.254.18(Основной)
- автоматически полученный локальный адрес, если используется APIPA



Локальный IPv6-адрес канала . . . : fe80::7c22:e7f8:3a71:8249%16(Основной)
- локальный IPv6 адрес, если используется адресация IPv6



IPv4-адрес. . . . . . . . . . . . : 10.10.11.77(Основной)
- используемый для данного адаптера IPv4 - адрес.



Маска подсети . . . . . . . . . . : 255.255.224.0
- маска подсети.



Аренда получена. . . . . . . . . . : 2 марта 2012 г. 22:44:48
- дата и время получения сетевой конфигурации от сервера DHCP



Срок аренды истекает. . . . . . . . . . : 3 марта 2012 г. 2:31:27
- срок истечения аренды сетевых настроек. Определяется сервером DHCP.



Основной шлюз. . . . . . . . . : 10.10.11.1
- IP - адрес маршрутизатора, используемого в качестве шлюза по умолчанию.



Код класса DHCPv4. . . . . . . . . . : TEST
- код класса DHCP, если он существует.




DHCP-сервер. . . . . . . . . . . : 10.10.11.11 -
- IP-адрес DHCP-сервера, от которого получена сетевая конфигурация.


Следующие 2 параметра (идентификатор участников DHCP - DUID и идентификатор арендованного адреса IAID) присутствуют при автоматическом конфигурировании настроек протокола IPv6 . В крупных сетях могут присутствовать несколько серверов DHCPv6. При автоматическом конфигурировании сетевого адаптера, все они получают от клиента специальный запрос DHCP REQUEST. Каждый из них проверяет, ему ли был направлен запрос. Сервер не приступает к обработке пакетов с DUID, отличающимся от его собственного. При совпадении DUID, сервер помечает адрес как присвоенный и возвращает ответ DHCP REPLY. На этом обработка запроса завершается.

IAID - это специальный идентификатор арендуемого IPv6-адреса длиной 4 байта. Клиенту выделяется адрес на время, определенное сервером (срок аренды). Когда предпочитаемый срок действия адреса заканчивается, клиент отправляет серверу пакет DHCP RENEWс запросом на продление этого срока. В сообщение включается идентификатор IAID, код которого также хранится в базе данных DHCP сервера. Если сервер готов продлить срок действия адреса, он отправляет ответ DHCP REPLY и клиент получает возможность использования арендованного адреса без повторного получения настроек.



IAID DHCPv6 . . . . . . . . . . . : 234890384
- идентификатор арендованного адреса IAID


DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-14-E2-78-C0-00-0C-1E-7C-29-E3
- идентификатор участников DHCP



DNS-серверы. . . . . . . . . . . : 94.25.128.74

                       
                       
94.25.208.74
- адреса DNS - серверов, используемых для разрешения имен в IP-адреса узлов.




NetBios через TCP/IP. . . . . . . . : Включен
- режим использования NetBios через протокол TCP/IP.




Утилита GETMAC .






   
Утилита командной строки GETMAC присутствует в версиях Windows XP и старше. Используется для получения аппаратных адресов сетевых адаптеров (MAC-адресов) как на локальном, так и на удаленном компьютере.



Синтаксис:



GETMAC [/S <система> [/U <пользователь> [/P <пароль>]]] [/FO <формат>]
[/NH] [/V]



Параметры:


/S <система> - имя или IP-адрес удаленного компьютера.


/U [<домен>\]<пользователь> Имя пользователя. Если не задано, то используется текущая учетная запись.




/P [<пароль>] - Пароль. Если задан параметр /U и не задан пароль, то он будет запрошен.



/FO <формат> - Формат, в котором следует отображать результаты запроса. Допустимые форматы: "TABLE" (таблица), "LIST" (список), "CSV" (разделяемые запятыми поля). Если параметр не задан, то используется вывод в виде таблицы (TABLE) .



/NH - Указывает, что строка заголовков столбцов не
должна отображаться в результирующем файле.
форматов TABLE и CSV.



/V - Отображение подробной информации. В отображаемой информации присутствует имя сетевого подключения и название сетевого адаптера.



/? - Вывод справки по использованию команды.



Примеры:


GETMAC /? - отобразить краткую справку об использовании GETMAC.

GETMAC /FO csv - выдать информации о MAC-адресах всех существующих на локальном компьютере сетевых адаптеров в формате CSV (полей с разделителями в виде запятой)

GETMAC /S COMPUTER /NH /V - получить MAC адреса сетевых адаптеров для удаленного компьютера COMPUTER, не отображать заголовки столбцов в таблице и использовать отображение подробной информации. Для подключения к удаленному компьютеру используется текущая учетная запись пользователя.


GETMAC /S 192.168.1.1 /NH /V - то же самое, но вместо имени компьютера задан его IP-адрес.

GETMAC /S COMPUTER /U user /P password - получить MAC - адрес адаптеров удаленного компьютера COMPUTER. Для подключения к нему используется имя пользователя "user"и пароль "password"


GETMAC /S COMPUTER /U mydomain\user - для подключения к удаленному компьютеру используется учетная запись пользователя "user"в домене "mydomain". Пароль пользователя вводится по запросу.

GETMAC /S COMPUTER /U mydomain\user /P password - то же самое, что и в предыдущем случае, но пароль задан в командной строке.




Пример выводимой информации по GETMAC без параметров:



Физический адрес             Имя транспорта

=================== ==========================================================

00-00-DB-CE-97-9C            \Device\Tcpip_{85E2B831-859B-45D4-9552-0E6DCFB57391}

00-2E-20-6B-0D-07             \Device\Tcpip_{158A50DF-F6F2-4909-8F15-DF94B51A81FF}


По имени транспорта можно найти в реестре записи, связанные с данным сетевым адаптером.


http://ab57.ru/cmdlist.html


Командные файлы Windows часть 3

$
0
0




Поиск в локальной сети включенных компьютеров.



   
В данном примере речь идет о создании командного файла, позволяющего "собрать"список IP-адресов узлов локальной сети, включенных на данный момент времени. Ничего принципиально нового в плане создания командных файлов здесь нет, но тем не менее, задача поиска включенных узлов в локальной сети встречается довольно часто, и решить ее описанными выше способами, с использованием ping.exeи net view удается далеко не всегда, поскольку в современных версиях операционных систем семейства Windows настройки брандмауэров по умолчанию, задают довольно жесткие правила, блокирующие сетевые соединения извне, и ответы на эхо-запрос. Другими словами, включенный в локальную сеть компьютер ( или другое сетевое устройство ) может не отображаться в сетевом окружении Windows и не отвечать на эхо-запросы ( “пинги” ).


Прием, используемый для получения списка включенных сетевых устройств при решении данной задачи остается прежним – необходимо определить характерные отличия в выходных сообщениях стандартных сетевых утилит в случае, когда устройство выключено, и когда – защищено параноидальными настройками брандмауэра. Для этого можно воспользоваться стандартной командой arpпозволяющей просматривать содержимое таблиц разрешения IP-адресов в физические ( MAC ) адреса.


При любой передаче пакетов IP-протокола с данного компьютера на IP-адрес другого сетевого устройства в локальной сети, программные средства сетевых протоколов выполняют процедуру определения физического адреса сетевого адаптера получателя ( MAC-адрес получателя). Всем сетевым устройствам отправляется специальный широковещательный запрос ( запрос который будет принят всеми компьютерами данной подсети), означающий “чей MAC – адрес соответствует такому-то IP-адресу”. Если какое-либо сетевое устройство опознало свой собственный IP-адрес, оно отправит ARP-ответ, содержащий соответствующий MAC-адрес, который будет сохранен в специальной таблице соответствия адресов IP и MAC, хранящейся в оперативной памяти компьютера, отправившего ARP-запрос. Запись информации в данную таблицу выполняется только при необходимости передачи любых данных по протоколу IP, что можно инициировать, например, пингованием опрашиваемого устройства. Даже если настройками брандмауэра полностью закрыты все соединения извне и блокируется протокол ICMP ( устройство не «пингуется» ) , в буферной памяти сервиса ARP будет присутствовать запись соответствия IP и MAC, если устройство было подключено к локальной сети и участвовало в процедуре разрешения адреса . Таким образом, отсутствие ответа на пинг и наличие записи для пингуемого IP-адреса в ARP-кэш является признаком того, что устройство включено и присутствует в локальной сети.


Для просмотра содержимого ARP-кэш можно воспользоваться командой


arp –a - отобразить все записи в таблице ARP


Пример отображения таблицы ARP:


Интерфейс: 192.168.0.29 --- 0xa
  адрес в Интернете      Физический адрес      Тип
  192.168.0.1           00-1e-13-d6-80-00     динамический
  192.168.0.3           60-eb-69-08-18-d2     динамический
. . . 
Интерфейс: 192.168.234.1 --- 0xf
  адрес в Интернете      Физический адрес      Тип
  192.168.234.255       ff-ff-ff-ff-ff-ff     статический
  224.0.0.22            01-00-5e-00-00-16     статический
  224.0.0.252           01-00-5e-00-00-fc     статический
  239.255.255.250       01-00-5e-7f-ff-fa     статический



Как видно из приведенной таблицы, например IP – адресу 192.168.0.1соответствует физический адрес сетевого адаптера, равный 00-1e-13-d6-80-00 . Если же сетевой адаптер с данным адресом будет недоступен, то такой записи в таблице не будет.


Для понимания алгоритма опроса сети необходимо учесть следующее:


Разрешение адресов ARP используется только при передаче данных по IP-протоколу в пределах сегмента локальной сети, задаваемого маской. Так, например, для примера с IP адресом 192.168.0.1 и маски 255.255.255.0 это будет диапазон IP от 192.168.0.1 до 192.168.0.254. Обращение же к любому другому адресу будет выполняться через устройства маршрутизации. Т.е. при выполнении команды


ping yandex.ru



В таблице ARP будет не MAC-адрес сетевого адаптера, соответствующего IP-адресу узла с именем “yandex.ru”, а MAC-адрес шлюза, через который выполнилась отправка IP-пакета для доставки получателю в “чужой” сети.


Ниже приводится простой пример командного файла, определяющего список включенных сетевых устройств локальной сети по результатам выполнения команд PING и ARP.


 
@ECHO OFF
REM  Устанавливаем значение переменной IPTMP - постоянной части IP-адреса
set IPTMP=192.168.213.
REM Переменная N задает количество опрашиваемых IP-адресов  
set N=128
rem Переменная IPMIN задает начальный IP-адрес. ( полный адрес состоит из IPTMP IPMIN )
set /A IPMIN=1
REM результаты будут записаны в файл oprosipplus.txt
ECHO               %DATE%      Опрос ARP %N% адресов начиная с %IPTMP%%IPMIN% >> oprosipplus.txt
rem M0 - метка для организации цикла
:M0
rem Переменная IPFULL - полное значение текущего IP-адреса, состоящего из IPTMP И IPMIN
set IPFULL=%IPTMP%%IPMIN%
rem Если "хвост "больше N - на завершение работы
IF %IPMIN% GTR %N% GOTO ENDJOB
REM если « хвост » меньше N – продолжим опрос
REM выполним пинг и проверим наличие записи в ARP-кэш
ping -n 1 %IPFULL% 
arp -a | find /I "%IPFULL%" 
REM Если запись есть — запишем это событие в журнал oprosipplus.txt
if %ERRORLEVEL%==0 Echo %IPFULL% >> OPROSipPLUS.txt
rem Сформируем следующий IP-адрес
set /A IPMIN=%IPMIN% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exit





Работа с дисками, файлами и каталогами.



   
Задача - определить буквы дисков, присутствующих в системе и записать результат в файл с
именем tstdsk.txt текущего каталога. Можно воспользоваться выполнением команды IF EXISTв цикле FOR для набора из букв латинского алфавита, т.е
для каждой буквы диска проверить наличие корневого каталога командой


IF EXIST буква диска:\



Сначала создаем пустой файл:


copy nul tstdsk.txt


Это действие необязательно, если файла не существует, но в противном случае, результаты будут дописываться в конец файла, и если в нем уже был список дисков от предыдущего исполнения командного файла, то он удвоится. Команда copy nul tstdsk.txt для существующего файла установит нулевой размер данных, т.е. сделает его пустым.


Окончательно, командный файл будет выглядеть следующим образом:


copy nul tstdsk.txt

for %%i in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO (

if exist %%i:\ echo Disk %%i: exist >> tstdsk.lst

)



Для обработки файлов определенного типа, например любых с расширением .tmpиспользуется маска - *.tmp . Так, для удаления всех файлов *.tmp из каталога C:\TEMP можно воспользоваться командой ERASE (или DEL )


ERASE C:\TEMP\*.TMP

DEL /Q C:\TEMP\*.TMP


В масках файлов и каталогов возможно использование частичных имен


ERASE C:\TEMP\A*.TMP - удалить все файлы с расширением .TMP , имя которых начинается с символа "A"

DIR *u*.* - выдать список всех файлов и подкаталогов текущего каталога, в имени которых содержится символ "u"

DIR C:\*t.* - выдать список всех файлов и каталогов в корне диска C: , имя которых заканчивается символом "t"



Задача - получить список всех каталогов с подкаталогами на логическом диске и записать результат в текстовый файл. Для рекурсивной обработки каталогов диска будем использовать команду FOR /R



FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]



Ключ /R означает выполнение команды для каталога [диск:]путь. Если в команде путь не задан, то обработка выполняется для текущего каталога.



Простой пример удаления файлов с расширением .tmp из каталога C:\TEMP:



FOR /R C:\temp\ %%i IN (*.tmp) DO del %%i



При выполнении команды возможно использование подстановочных значений переменной цикла для получения имен дисков, папок, файлов и их характеристик. Полный список возможных значений в случае использования переменной с именем i



%%~i - из переменной %i удаляются обрамляющие кавычки (")

%%~fi - переменная %i расширяется до полного имени файла

%%~di - из переменной %i выделяется только имя диска

%%~pi - из переменной %i выделяется только путь к файлу

%%~ni - из переменной %i выделяется только имя файла

%%~xi - из переменной %i выделяется расширение имени файла

%%~si - полученный путь содержит только короткие имена

%%~ai - переменная %i принимает значение атрибутов файла

%%~ti - переменная %i принимает значение даты /времени файла

%%~zi - переменная %i принимает значение размера файла





Возможно объединение нескольких операторов :



%%~dpi - переменная %i заменяется только на имя диска и путь

%%~nxi - переменная %i заменяется только на имя файла и его
расширение

%%~fsIi - переменная %i заменяется только на полный путь с
краткими именами

%%~ftzai - переменная %I заменяется на строку, выдаваемую
командой DIR



Значение переменной %%pi внутри цикла команды FOR /R будет последовательно принимать значения путей папок, начиная с заданного набора [диск:]путь.


Так же, как и в предыдущем примере, желательно обнулить файл с результатами возможного предыдущего запуска данного командного файла:


REM Обнулить / создать файл для хранения списка каталогов C:\dirlist.txt

copy nul C:\dirlist.txt

REM Занесем первой строкой в пустой файл что-то вроде заголовка списка

Echo *** Список папок на диске C: *** >> C:\dirlist.txt

REM Сделать текущим каталогом корневой каталог диска C:

cd c:\

REM Выполнить для корневого каталога и всех вложенных каталогов, команду ECHO с выдачей значения переменной %%~pi

for /R %%i in (C) DO (

ECHO Папка "%%~pi">> C:\dirlist.txt

)



В результате выполнения этого командного файла в корне диска C: будет создан файл dirlist.txt, содержащий список каталогов диска.


Если в цикле команды FOR /R используются подстановочные значения переменной %%I, то в качестве набора (in) не стоит использовать символ точки.


Задача - найти на диске файлы с расширением .log и скопировать их в каталог на другом логическом диске - D:\MUSOR


Желательно проверить наличие каталога D:\MUSOR и при необходимости, создать его командой
md, а также удалить из него все файлы, если они существуют, командой del . Затем выполнить переход в корневой каталог диска C: и выполнить в цикле команды FOR поиск файлов по маске *.logво всех подкаталогах.


REM подготовить каталог D:\MUSOR

if not exist D:\MUSOR md D:\MUSOR

REM удалить без подтверждения ( /Q) все файлы из каталога

del /Q D:\MUSOR\*.*

REM перейти в корень диска C:

cd c:\

REM Выполнить проверку наличия файлов с расширением *.log и скопировать их в

REM D:\MUSOR

for /R %%i in (c) DO (

if exist "%%~dpi*.log" copy "%%~dpi*.log""D:\MUSOR\*.*"

)



Практика использования FOR /R показала, что не стоит использовать в качестве набора для обработки символ "точка" ( конструкция in (.) ), поскольку при использовании подстановочных значений, можно получить возврат из текущего каталога на уровень выше. В данном примере в качестве набора in используется любой не служебный символ. Команду копирования ( copy ) можно заменить на команду перемещения файлов (MOVE), что приведет к удалению файлов источников после копирования в каталог D:\MUSOR.



Пример с копированием файлов с расширением .log рассмотренный выше имеет некоторые
существенные недостатки - не обрабатываются скрытые файлы и папки, и в конечном каталоге,
куда копируются файлы ( D:\MUSOR ) не создаются подкаталоги с теми же именами, которые принадлежат путям исходных копируемых файлов. Для устранения этих недостатком можно использовать немного другой скрипт :



@echo off

REM подготовить каталог D:\MUSOR - удалить его и его подкаталоги командой RD

RD /S /Q D:\MUSOR

REM Создадим каталог заново

MD D:\MUSOR

REM Задаем начальную папку для обработки в команде FOR - C:\

for /R C:\ %%i in (C) DO (

xcopy "%%~dpi*.log""D:\MUSOR%%~pi*.*" /H /R /Q /Y

)


Для копирования используется команда xcopyс ключами:


/H - копировать скрытые файлы.

/R - разрешение на замену файлов с атрибутом "Только чтение"

/Q - не отображать имена копируемых файлов

/Y - разрешать перезаписывать существующие файлы.


Подсказку по использованию команды XCOPYможно получить при вводе:

help xcopy

xcopy /?


При обработке строки xcopy "%%~dpi*.log""D:\MUSOR%%~pi*.*" /H /R /Q /Yв цикле FOR, в качестве источника копирования будет выбираться C:\текущий путь\*.logа в качестве приемника - D:\MUSOR\текущий путь\имя копируемого файла



Похожий подход можно использовать для обнаружения и копирования исполняемых файлов (*.exe) из каталога временных файлов, задаваемого переменной TEMP. Бывает полезно для поиска вредоносных программ.


rem @echo off

REM подготовить каталог D:\MUSOR - удалить командой RD

RD /S /Q D:\MUSOR

REM Создадим каталог заново

MD D:\MUSOR

REM Задаем начальную папку для обработки (%TEMP%) и выполняем FOR

for /R "%TEMP%" %%i in (C) DO (

xcopy "%%~dpi*.exe""D:\MUSOR%%~pi*.*" /H /R /Q

)



   
При работе с содержимым каталогов удобно использовать команды запоминания текущего каталога и перехода в новый PUSHDи команды восстановления ранее запомненного текущего каталога POPD


PUSHD "%TEMP%"

Echo Работаем в каталоге временных файлов

REM новый каталог стал текущим и можно использовать относительные пути

REM Выдать список exe-файлов текущего каталога (%TEMP%) командой DIR

DIR *.exe

REM Восстановить путь, запомненный командой PUSHD

POPD

)

Echo Вернулись в исходный каталог






Работа с графическими приложениями Windows.



   
Допустим, вам нужно из одного и того же командного файла запустить notepad.exe
и cmd.exe. Если просто вставить строки

notepad.exe

cmd.exe

то после запуска notepad.exe выполнение командного файла приостановится и пока не
будет завершен notepad, cmd.exe не запустится. Самый простой способ обойти эту
проблему - использовать стандартную команду Windows
start
. Полную справку по использованию можно получить по:

start /?

Попробуйте создать командный файл следующего содержания:


start /MAX notepad.exe

start "This is CMD.EXE" /MIN cmd.exe

net send %COMPUTERNAME% NOTEPAD and CMD running.


После выполнения этого командного файла вы увидите стартовавшие, в развернутом окне
(ключ /MAX) блокнот, в свернутом окне (ключ /MIN) командный процессор CMD.EXE и
окно с сообщением net.exe. Стандартный заголовок окна cmd.exe заменен на текст
"This is CMD.EXE". Обратите внимание на то что заголовок окна можно опускать, но
особенность обработки входных параметров командой start может привести к
неожиданным результатам при попытке запуска программы, имя или путь которой содержит
пробел(ы). Например при попытке выполнить следующую команду:

start "C:\Program Files\FAR\FAR.EXE"

Из-за наличия пробела в пути к исполняемому файлу,
строка для запуска FAR.EXE должна быть заключена в двойные
кавычки, однако формат входных параметров для start предполагает наличие заголовка
окна, также заключаемого в двойные кавычки, в результате чего "C:\Program Files\FAR\FAR.EXE"
интерпретируется не как исполняемая программа, а как заголовок окна.
Для того, чтобы подобного не случилось нужно
использовать любой, пусть даже пустой, заголовок:

start """C:\Program Files\FAR\FAR.EXE"



   

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

CMDOWСкачать ~15кб

Сайт разработчика

Из-за специфического поведения эта утилита большинством антивирусов определяется
как вирус, поэтому для нормальной работы нужно занести ее в исключения антивируса.


Cmdow.exe - крошечная утилита, работающая в Windows NT4/2000/XP/2003 без установки.
Позволяет получить список окон, перемещать, изменять размеры, переименовывать,
сворачивать/разворачивать, активировать/деактивировать, закрывать, скрывать окна
приложений и многое другое. Справку можно получить по команде:

cmdow /?

Используется около 30 ключей. Описание на русском языке найдете
здесь.
Некоторые примеры:


  • Получение информации об окнах:


  • cmdow.exeили cmdow.exe > wins.txt - выдать информацию обо всех окнах на экран или в файл wins.txt

    cmdow /T - выдать информацию об окнах, отображаемых на панели
    задач рабочего стола.

    Информация содержит колонки:


    Handle - дескриптор окна - шестнадцатеричное число, связанное с данным окном.

    Lev - уровень окна. Приложение может быть многооконным с несколькими уровнями окон.

    Pid - идентификатор процесса, породившего окно.

    -Window status- - состояние окна (видимое - Vis, скрытое - Hid, активное - Act,
    свернутое - Min и т.п.

    Image - программа вызвавшая окно.

    Caption - название окна



    Манипулировать окнами можно используя название окна, или его дескриптор. Если
    название окна содержит пробелы, то оно заключается в двойные кавычки. Если имеются
    русские буквы, то должна использоваться DOS-кодировка. Символ @используется
    для указания текущего окна. Иногда проще использовать
    дескриптор окна, а не его название. Полезным может быть и использование команды поиска
    по строке find.exe, выполняемой в цепочке с cmdow:

    cmdow.exe | find.exe /I "hid"> wins.txt - в файл wins.txt попадут только строки
    содержащие шаблон "hid"и мы получим список скрытых окон.

    cmdow.exe | find.exe /I "MyIE"> wins.txt - список окон приложения MyIE




  • Манипулирование окнами.


  • Если вы хотите, чтобы ваш командный файл выполнялся скрытно,
    добавьте в него строку:

    cmdow @ /HID - скрыть текущее окно

    Ниже командный файл с комментариями, демонстрирующий возможности работы cmdow:


    @ECHO OFF

    REM Свернуть все окна - /MA

    cmdow /MA

    REM запустить cmd.exe с заголовком окна MyCMD

    start "MyCMD" cmd.exe

    REM ждать 5 секунд

    call :wait5s

    REM

    :M1

    REM Скрыть окно MyCMD

    cmdow MyCMD /hid

    call :wait5s

    REM Сделать видимым

    cmdow MyCMD /vis

    call :wait5s

    REM Переместить в верхний левый угол экрана и развернуть окно

    cmdow MyCMD /MOV 0 0

    cmdow Mycmd /max

    call :wait5s

    REM Изменить размер на 320 х 240 и переместить вправо на 320 точек

    cmdow MyCMD /MOV 320 0 /SIZ 320 240

    call :wait5s

    REM Переместить окно в точку с координатами 320 x 240 и изменить размер на 350x50

    cmdow MYCMD /MOV 320 240 /SIZ 350 50

    call :wait5s

    REM Восстановить окно

    cmdow MYCMD /RES

    call :wait5s

    REM Восстановить и сделать активным окно этого командного файла

    cmdow @ /RES /ACT

    ECHO Для завершения нажмите CTRL-C (CTRL-Break)

    call :wait5s

    call :wait5s

    REM Зацикливание - переход к метке :M1

    GOTO M1

    REM Подпрограмма задержки на 5секунд

    :wait5s

    @ping -n 5 localhost > nul



        Пример командного файла, закрывающего окна Проводника Интернет
    (IEXPLORE.EXE):


    @echo off

    :M1

    for /f "tokens=1-2,8" %%a in ('cmdow') do (

    if /i "%%c"=="IEXPLORE" if "%%b"=="1" cmdow %%a /END > nul

    )

    goto M1


    Работает это следующим образом. Из выходных данных CMDOW берется
    первое, второе и 8-е поля.
    Первое - дескриптор окна (Handle), второе - уровень (Lev), третье - имя
    программы (Image). В цикле
    выполняется cmdow и если в ее выводе имеется строка, где имя
    программы IEXPLORE и уровень окна 1 выполняется cmdow <дескриптор> /END.
    Пока этот командный файл выполняется, запустить "Обозреватель интернета"не
    получится. А если в начало командного файла добавить "cmdow @ /hid" - то будет
    скрыто и его окно.






    Перекодировка текстовых файлов.



       
    В рассматриваемом примере нужно преобразовать исходный текстовый файл в DOS-кодировке
    в новый текстовый файл в Windows-кодировке.
    В качестве механизма перекодировки используется смена
    кодовой страницы командой CHCP
    и построчная выдача содержимого исходного файла командой ECHOс
    перенаправлением вывода в новый файл. Для DOS-кодировки используется
    кодовая страница 866, для Windows-кодировки - 1251. В примере исходный файл
    называется 866.txt, а файл с перекодированными данными - 1251.txt



    @echo off

    chcp 866 >nul

    for /f "tokens=*" %%i in (866.txt) do call:to1251 "%%i"

    exit


    :to1251

    chcp 1251 >nul

    echo %~1 >>1251.txt

    chcp 866 >nul

    exit /b


    Аналогичный подход можно использовать и для преобразования текста из Windows -
    кодировки ( кодовая страница 1251) в DOS-кодировку (кодовая страница 866).
    Естественно, такая перекодировка не может учитывать пустые строки и форматирование
    текста с помощью спецсимволов, поскольку команда ECHO не позволяет работать с
    такими форматами данных.


    Своеобразным современным стандартом программы для перекодировки
    файлов считается, портированная из Unix утилита iconv
    (в составе библиотеки libiconv).



    iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile ...]


    Входная кодировка задаётся ключом -f, а выходная - ключом -t .
    Если ключи не заданы,
    используется кодировка для языка системы по умолчанию.
    Все входные файлы читаются по очереди, если не задан параметр входного файла,
    то используется стандартный ввод, а конвертируемый текст выводится на
    стандартный вывод.


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


    Когда задана опция -s, сообщения об ошибках не выводятся.


    Ключ -lпозволяет получить список доступных кодировок. Утилита позволяет
    перекодировать текст, практически, из любой кодировки в любую.



    Скачать последнюю версию iconv для Windows (в составе пакета libiconv)
    можно
    здесь





    Часто встречающиеся ошибки при написании командных файлов.







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




       
    Обычно, это вызвано тем, что вы не учитываете тот факт, что на момент выполнения вашего командного файла переменные среды могут быть совсем другими, чем на момент его написания и запуска из командной строки. Например, в командном файле используется запуск приложения myprog.exe, находящегося в каталоге SCRIPTS на диске D: . Если в командном файле используется имя модуля без полного пути



    MYPROG.EXE


    и если каталог D:\SCRIPTS не прописан в путях поиска (переменная PATH ) то модуль MYPROG.EXE может быть найден и выполнен только если текущим каталогом является D:\SCRIPTS. Но если вы укажете полный путь к myprog.exe:

    D:\SCRIPTS\myprog.exe

    то программа будет найдена и выполнена в любом случае.


    Кроме того, нередко программа, указанная в командном файле использует для поиска своих компонент (dll, ini и т.п. ) собственный каталог. Но на момент ее выполнения текущим каталогом может быть любой (чаще всего - системный каталог Windows). Естественно, компоненты не находятся и программа не выполняется. Для устранения проблемы добавьте в командный файл команды, обеспечивающие переход в нужный каталог. Например, программа myprog.exe должна выполняться в каталоге D:\SCRIPTS:



    Rem Сменим текущий диск

    D:

    Rem перейдем в каталог SCRIPTS

    CD D:\SCRIPTS

    myprog.exe



  • Неправильно отображаются русские имена файлов, служб и т.п.




  • Причина в том, что при создании командных файлов вы
    использовали текстовый редактор, в котором русские символы представлены
    не в DOS-кодировке. Если в приведенном выше примере перезапуска службы "DNS-клиент"
    вы используете неверную кодировку, то русская часть имени службы не будет опознана
    из-за неверной кодировки и будет выдано сообщение, что указанная служба не
    установлена. Чтобы избежать проблем с русскими символами в командных файлах,
    используйте редактор с поддержкой DOS-кодировки, например, встроенный редактор
    файлового менеджера FAR.

    Переключение между кодировками в редакторе осуществляется нажатием F8 .
    С помощью FAR можно легко осуществлять перекодировку, скопировав (вырезав) текст в буфер обмена, затем
    нажав F8 и вставив текст из буфера.



  • Командный файл выполняется на одном компьютере успешно, но на другом - не работает.



  •     Обычно это вызвано применением в командных файлах абсолютных значений вместо
    переменных среды окружения. Вместо C:\WINDOWS правильнее использовать %SYSTEMROOT%, потому,
    что на другом компьютере система может быть установлена в другой каталог или на другой диск.
    Старайтесь вместо имени командного файла использовать переменную %0 и ее
    подстановочные
    варианты (%~d0 - диск с которого запущен сценарий, %~dp0 - полный путь и т.д.).



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

    DIR %ProgramFiles%

    не выдаст вам содержимого каталога C:\Program Files , поскольку из-за наличия пробела будет
    интерпретирована как

    DIR C:\Program

    Командная строка

    DIR "%ProgramFiles%"

    выполнится верно.



        Старайтесь использовать команды Setlocal и Endlocal, чтобы не оставлять мусор
    из переменных, созданных или модифицированных командным файлом.



    Использование командных файлов в сценариях регистрации
    пользователей .


       
    Командные файлы
    удобно использовать для выполнения каких-либо
    действий при регистрации пользователя в
    домене. Делается это с помощью вкладки Profile
    свойств пользователя домена.


    <


    Сами командные файлы должны
    находиться в сетевой папке Netlogon (WINDOWS\SYSVOL\ DOMAIN\SCRIPTS) контроллера домена.



       
    Однако наиболее распространенной областью применения командных файлов является их
    использование в сценариях групповых политик, позволяющих
    централизованно выполнять административные
    действия по управлению большим количеством компьютеров и пользователей в
    домене, что значительно облегчает работу системных администраторов
    крупных компьютерных сетей.



    Дополнительные материалы по командной строке Windows:


    Список команд,
    используемых в командной строке Windows
    . Имена большинства команд представляют собой ссылку на
    страницы с их описанием и примерами.


    Настройка окна командной строки
    Windows
    . Малоизвестные возможности изменения свойств консоли Windows.


    Работа с сетью в
    командной строке Windows
    - Описание и примеры использования
    утилит командной строки для работы с сетью.


    http://ab57.ru/cmd.html

    Командные файлы Windows часть 2

    $
    0
    0



    Выполнение каких либо действий в заданный интервал времени.



       
    Речь пойдет не о запуске командного файла в определенное время, а
    о выполнении какой-то его части только в определенный интервал времени,
    например, с 10:00 до 12:00. Решения данной задачи потребует сравнения
    текущего времени с указанным промежутком. Для примера, создадим командный
    файл, выполняющий запуск стандартного калькулятора Windows , только в том
    случае, если он запущен в интервале времени от 10:00 до 12:00. Необходимо
    получить текущее время и выполнить проверку того, что оно не больше 12:00 и
    не меньше 10:00 .

    Команда IFпозволяет выполнить сравнение строк
    при использовании формата:



    IF /I строка1 оператор_сравнения строка2 команда


    где оператор_сравненияпринимает следующие значения:


        EQL - равно
        NEQ - не равно
        LSS - меньше
        LEQ - меньше или равно
        GTR - больше
        GEQ - больше или равно
    

    а ключ /I, если он указан, задает сравнение текстовых строк без учета
    регистра. Этот обычно используется для сравнения текстовых строк в
    форме строка1==строка2. Сравнения проводятся по общему типу данных,
    так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в
    числа, после чего выполняется их сравнение. Следовательно, для решения нашей
    задачи нужно сравнить
    строку из первых двух символов значения переменной TIME ( чч:мм:сс )
    с заданным диапазоном :


    REM Время меньше 12:00 - перейти на анализ второго условия, иначе - выход
    if %time:~0,2% lss 12  goto tst2
    exit
    :tst2
    Rem Время больше 10:00 - перейти к выполнению, меньше - завершить работу выполнив exit
    if %time:~0,2% gtr 10  goto excalc
    exit
    :excalc
    calc.exe
    




    Подобным же образом можно организовать проверку по дате, учитывая тот факт, что для данного способа
    сравнения необходимо использовать только числовые значения из переменных.



    Пример создания архива каталога "Мои Документы".



       
    Этот командный файл создает архивы содержимого папки
    "Мои Документы"пользователей Win2K/XP, размещая их в каталоги

    C:\ARHIV\Мои документы\Имя пользователя\Дата\время


    Используются переменные окружения USERPROFILE, USERNAME, WINDIR.
    Если вы разобрались с предыдущим примером, содержимое данного командного
    файла не должно вызывать особых затруднений, поскольку в нем присутствуют
    комментарии ( rem ), поясняющие в короткой форме смысл и назначение
    последующих строк:


    @echo off

    rem Задается переменная FROM - откуда брать данные для архивирования

    set FROM=%USERPROFILE%\Мои Документы

    rem Задается переменная TO - куда помещать архивы

    set TO=C:\arhiv\Мои документы\%USERNAME%

    rem Создадим каталог ТО

    md "%TO%\"

    rem Сформируем имя подкаталога из текущей даты

    set VDATE=%date:~-10%

    rem Сформируем имя файла архива из текущего времени - 12:00:00.99

    rem отбросим сотые доли секунды и заменим символ : на символ . Результат - 12.00.00



    set vtime=%TIME:~0,-3%

    set vtime=%vtime::=.%

    rem Создадим подкаталог для файла архива

    md "%TO%\%VDATE%"

    rem Команда для архивирования. Ключ -r нужен для архивирования с вложенными папками

    rem вариант для архиватора ARJ : arj.exe a -r "%TO%\%VDATE%\%VTIME%.arj""%FROM%\*.*"

    rem При использовании архиватора RAR:

    rar.exe a -r "%TO%\%VDATE%\%VTIME%.rar""%FROM%\*.*"



    Если у вас возникнут проблемы связанные с неверной кодировкой символов
    русского алфавита в именах файлов и каталогов, попробуйте воспользоваться командой
    CHCPдля смены кодовой страницы

    chcp 866 - установить кодовую страницу 866 (DOS-кодировка)

    chcp 1251 - установить кодовую страницу 1251 (Windows-кодировка)




    Этот командный файл можно значительно сократить, убрав ненужные
    переменные VTIME и VDATE, которые в данном примере, используются лишь для того ,
    чтобы скрипт имел более наглядный и простой для понимания вид.



    В операционных системах Windows XP/Vista/7 формат даты по умолчанию не
    содержит название дня недели. Если есть необходимость получить это значение
    без изменения настроек системы и использования дополнительного программного
    обеспечения, можно воспользоваться сценарием Hindows Script Host (WSH).


    - создаем файл сценария для получения названия дня недели, пусть с именем
    weekday.vbs, и содержащим строку вывода на экран результата выполнения
    функции WeekDayName

    WScript.Echo WeekDayName(Weekday(Now), True)

    - выполняем скрипт WSH с использованием консольной
    версии программы обработки сценариев cscript.exe и
    подавлением лишних сообщений (ключ //nologo)

    cscript //nologo weekday.vbs


    Пример командного файла для получения названия дня недели с
    использованием функции WeekDayName :

    ECHO OFF

    echo WScript.Echo WeekDayName(Weekday(Now), True) > weekday.vbs

    for /f "Tokens=1*" %%i in ('cscript /nologo weekday.vbs') DO set DayName=%%i

    echo %DayName%

    REM Дальше можно использовать переменную DayName, а файл weekday.vbs - удалить

    REM ERASE dayname.vbs

    REM ...




    Возможности, предоставляемые в сценариях WSH, намного превосходят возможности
    командной строки CMD, поэтому, если задачу необходимо решить с помощью
    командного файла, можно воспользоваться приемом, как в рассмотренном выше
    примере.








    Изменение даты и времени файлов или папок.



       
    В Windows, к сожалению, не существует стандартного консольного средства для изменения даты и времени создания, доступа и модификации файлов и папок . Кто имел дело с Unix/Linux знает, что в этих операционных системах имеется простая и удобная утилита touchс помощью которой можно изменить время последнего доступа или время модификации файла на текущее значение или на значение времени, заданное в качестве аргумента командной строки. Если файл не существует, утилита создает пустой файл с указанным именем и устанавливает время создания , последнего изменения, и последнего доступа. Поэтому, нередко touchиспользуют для создания пустых файлов.


    Не секрет, что командная оболочка Unix/Linux значительно превосходит по своим возможностям командную строку Windows, поэтому, вполне понятно появление пакета UNIX Shell and Utilities для Windows NT и старше. Этот пакет представляет собой Windows-версии наиболее популярных утилит из среды Unix/Linux , которые могут выполняться как консольные команды в среде оболочки пользователя (в среде модуля sh.exe, входящего в пакет) или как исполняемые файлы в командной строке Windows. В набор входит
    более 200 программ от компании Mortice Kern Systems (MKS),
    рекомендуемых Microsoft в качестве средства миграции с Unix на Windows.


    Благодаря набору UNIX Shell and Utilitiesмногие, не решаемые в среде
    командной строки Windows задачи, можно решить с помощью unix-подобных утилит.
    И в том, числе, задачу изменения даты и времени создания, модификации и
    доступа файла или папки с помощью утилиты
    touch.exe Скачать, около 50Кб


    Справку по работе с touch.exeможно получить при запуске утилиты с принятым в Unix ключом "--help"


    touch.exe --help


    При этом пользователю выводится краткая подсказка


    touch [-acm] [-r|-f файл] [-t [[CC]YY]MMDDhhmm.[SS]] file файл


    -a - Устанавливает время последнего доступа ( access )к файлу. Время последнего изменения не устанавливается, если явно не задан ключ -m ( modify )

    -c - Указывает утилите не создавать файл, если он не существует.

    -m - Устанавливает время последнего изменения файла.

    -r file - Использовать значения времени из файла, заданного аргументом file.

    -t time - Устанавливает время последнего изменения (модификации) и доступа в соответствии с указанным форматом date_time.

    Формат даты, указанный в ключе -t задается в соответствии с шаблоном [[СС]YY]MMDDhhmm[.SS]:

    СС - первые две цифры года (век).

    YY - последние две цифры года.

    MM - двузначный номер месяца.

    DD - двузначный номер дня.

    hh - значение часов даты.

    mm - значение минут даты.

    SS - значение секунд даты.


       
    Примеры использования утилиты touch.exeв командной строке Windows:



    touch C:\folder\myfile.txt - изменить время доступа и модификации файла C:\folder\myfile.txt на текущее. Если файл не существует, он будет создан с нулевой длиной и текущим временем создания, модификации и доступа.

    touch C:\folder - изменить время доступа и модификации папки C:\folder на текущее.

    touch -f C:\ntldr C:\folder - изменить время доступа и модификации папки C:\folder на время, установленное для файла C:\ntldr

    touch -t 199803080102.00 C:\folder - установить для существующей папки "C:\folder"значение даты и времени модификации - 1998г., 8 марта, 1 час : 2 минуты :00 секунд

    touch -t 1112.30 C:\folder - установить для существующей папки "C:\folder"значение даты и времени модификации - текущая дата, 11 час : 12 минут :30 секунд

    touch -a -t 2222.20 C:\folder - изменить только время доступа, время модификации не изменяется.


       
    Кроме утилиты touchдля модификации времени
    файлов (но не папок) можно воспользоваться простой и удобной программой
    Юрия Усманова setdate . Скачать,
    архив zip размером около 16Кб).


    Примеры использования:


    setdate.exe -c C:\1.txt 22.11.2011 - установить для файла C:\1.txt дату создания 22.11.2011

    setdate.exe -m C:\1.txt 22.11.2011 - установить для файла C:\1.txt дату изменения (модификации) 22.11.2011

    setdate.exe -a C:\1.txt 22.11.2011 - установить для файла C:\1.txt дату доступа 22.11.2011

    setdate.exe -d C:\1.txt 22.11.2011 - установить для файла C:\1.txt все даты 22.11.2011








    Выполнение команд по расписанию.



    В операционных системах WINDOWS 2000/XP и старше существует утилита командной
    строки AT.EXE, позволяющая управлять задачами для
    планировщика заданий Windows, и таким образом, выполнить команду или
    пакетный файл в указанное время на локальном или удаленном компьютере.

    Естественно, для успешного функционирования команды ATнеобходимо,
    чтобы была запущена системная служба Планировщик заданий (обычно
    она существует и запускается автоматически при стандартной установке
    системы).


    Примеры команды

    AT [\\имя_компьютера] [ [код] [/DELETE] | /DELETE [/YES]]

    AT [\\имя_компьютера] время [/INTERACTIVE] [ /EVERY:день[,...] | /NEXT:день[,...]] "команда"


    \\имя_компьютера - имя удаленного компьютера. Если этот параметр
    опущен, задача относится к локальному компьютеру.

    код - порядковый номер запланированной задачи.
    Указывается если нужно отменить уже запланированную задачу с помощью
    ключа /delete.


    /delete - отменить запланированную задачу. Если код задачи опущен,
    отменяются все задачи, запланированные для указанного
    компьютера.

    /yes - не будет запроса на подтверждение при отмене всех
    запланированных задач.

    время - Время запуска команды.


    /interactive - интерактивный режим, разрешение взаимодействия
    задачи с пользователем. Задачи, запущенные без этого ключа невидимы для
    пользователя компьютера.


    /every:день[,...]Запуск задачи осуществляется по указанным дням недели или
    месяца. Если дата опущена, используется текущий день

    месяца.

    /next:день[,...]Задача будет запущена в следующий указанный день недели
    (например в следующий четверг). Если дата опущена,
    используется текущий день месяца.

    "команда" - Команда или имя командного файла.



    Примеры использования:



    </li>
  • Просмотр списка запланированных задач:



  • AT
  • - Удаление уже спланированных задач:



  • AT 3 /DELETE - удаление задачи с номером 3

    AT /DELETE /YES - удаление всех задач без запроса подтверждения


  • Создание интерактивных задач


  • at \\SERVER 15:21 /interactive notepad.exe - на компьютере
    SERVER в 15:21 запустить видимое для пользователя приложение
    "Блокнот" (notepad.exe)

    AT 15:30 /interactive regedit.exe - в 15:30 запустить видимый
    редактор реестра на своем компьютере.




  • Аналог "будильника" - всплывающие окна с текстом, напоминающие о
    необходимости каких-либо действий. Для посылки сообщения удаленному
    пользователю используется утилита NET.EXE в режиме отправки
    сообщения SEND. На компьютерах должна быть запущена служба
    сообщений, иначе NET SEND не будет работать. В ОС Windows Vista и более поздних,
    отправку сообщений нужно выполнять с помощью утилиты msg.exe, поскольку
    команда net send в этих ОС больше не поддерживается. Описание команды MSG



  • AT 17:30 net.exe send COMP Пора домой - в 17:30 отправить сообщение
    "Пора домой"пользователю компьютера COMP

    AT 17:30 msg.exe * /server:COMP Пора домой - то же, что и в предыдущем случае, но с использованием команды msg


    AT 17:39 msg.exe * Пора домой - запланировать на 17:39 отправку текстового сообщения "Пора домой"всем пользователям данного компьютера
    в среде Windows Vista / 7 / 8

    AT \\PROXY 15:30 net.exe send COMP2 Test Message - создать задание на
    компьютере PROXY, чтобы в 15:30 им было отправлено сообщение "Test Message"
    на компьютер COMP2

    AT 15:45 net.exe send имя своего компьютера Task Scheduler test - в
    15:45 на своем компьютере показать сообщение "Task Scheduler test"


    Для доступа к удаленному компьютеру и создания заданий,
    пользователь, выполняющий команду ATдолжен обладать
    соответствующими правами по отношению к удаленной системе.


    Создаваемые командой ATзадачи доступны для обработки в среде
    пользователя с помощью оснастки "Назначенные задания" Windows.


    Пуск - Панель управления - Назначенные задания - здесь можно
    просматривать, изменять и удалять созданные командой AT
    задачи. В Windows Vista / 7 используется меню - Панель управления - Администрирование - Планировщик заданий.







    Остановка и запуск системных служб.




     


    Для остановки и запуска служб из
    командной строки, в любой версии Windows, можно воспользоваться командой NET.EXE


    NET.EXE STOP < имя службы >


    NET.EXE START < имя службы >



    В качестве параметра команды можно использование как короткое, так и полное имя службы
    ("Dnscache" - короткое, "DNS-клиент" - полное имя службы).
    Имя службы, содержащее пробелы заключается в двойные кавычки.
    Пример перезапуска службы "DNS-клиент"




    net stop "DNS-клиент"


    net start "DNS-клиент"



    То же, с использованием короткого имени:

    net stop Dnscache


    net start Dnscache





    Полное имя службы можно скопировать из
    "Панель управления" - "Администрирование" - "Службы" - Имя службы -
    "Свойства" - "Выводимое имя".

    То же самое, но в режиме командной
    строки: "Пуск" - "Выполнить" - services.msc.


    Для управления службами гораздо удобнее воспользоваться утилитой
    PsService.exe из
    утилит PsTools
    Утилита не требует установки и работает в любой OS Windows. Кроме запуска и
    остановки, позволяет выполнить поиск конкретной службы на компьютерах локальной сети, опросить состояние и конфигурацию службы, изменить тип запуска, приостановить службу,
    продолжить, перезапустить.






       
    Для работы с системными службами в Windows XP и старше, можно использовать
    утилиту sc.exe,
    позволяющую не только остановить/запустить службу, но и опросить ее
    состояние, параметры
    запуска и функционирования, изменить конфигурацию, а также работать не только
    с системными службами,
    но и с драйверами. При наличии соответствующих прав, можно управлять
    службами не только на локальной, но и на удаленной машине. Примеры:

    sc.exe stop DNSCache - остановить службу DNSCache на локальном компьютере.

    sc \\192.168.0.1 query DNSCache - опросить состояние службы DNSCache на компьютере c
    IP-адресом 192.168.0.1

    sc \\COMP start DNSCacheзапустить службу DNSCache на компьютере COMP

    Подсказку по работе с утилитой можно получить, введя:

    sc /?







    Выдача значения переменной ERRORLEVEL .





       
    Этот простенький командный файл выдаст на экран значение переменной
    ERRORLEVEL по конкретной командной строке. Вначале выполняется проверка на
    наличие хотя бы одного
    входного параметра, и если ничего не задано, выдается сообщение об ошибке и происходит завершение
    по команде exit. Если же хотя бы один параметр задан, то входные
    параметры считаются командной
    строкой и выполняются, а значение ERRORLEVEL выдается с помощью команды ECHO.
    Содержимое файла (я назвал его echoEL.bat):



    @echo off

    if "%1" NEQ "" GOTO PARMOK

    ECHO Нужно задать командную строку для определения ERRORLEVEL

    exit

    :PARMOK

    %1 %2 %3 %4 %5 %6 %7 %8

    ECHO %1 %2 %3 %4 %5 %6 %7 %8 ERRORLEVEL=%ERRORLEVEL%


    Примеры запуска:

    echoEL.bat NET SHARE
        - будет выполнена команда
    NET SHARE (выдать список разделяемых сетевых ресурсов) и выдан
    код ERRORLEVEL

    echoEL.bat NET SHARE X"="C:\
        - будет
    выполнена команда NET SHARE X:=C:\ (создать разделяемый сетевой ресурс с именем X, и путем в корневой каталог
    диска C:) Обратите внимание на то, что символ = заключен в двойные
    кавычки.

        Перечисленные выше варианты задают корректную командную строку.
    Но попробуйте задать неверный параметр для NET.EXE или вообще
    несуществующую команду и вы увидите, какое значение примет ERRORLEVEL.




    Диалог с пользователем



       
    Для диалога с пользователем можно использовать команду:

    SET /P имя переменной = текст

    при выполнении которой, на экран выдается текстовое сообщение
    < текст > и ожидается
    ввод ответа. Пример - выполним запрос пароля и присвоим его значение
    переменной "pset":



    set /p pset="Enter password - "

    echo Password is - %pset%



    Недостатком данного способа является невозможность продолжения выполнения командного
    файла при отсутствии ответа пользователя, поэтому очень часто вместо
    set используются сторонние программы. В составе операционных систем семейства
    Microsoft Windows имеется утилита командной строки CHOICEпозволяющая
    довольно просто реализовать диалог с пользователем и проанализировать введенные
    им данные, однако в разных версия ОС утилита может присутствовать в стандартной
    поставке ( Windows 7 ) или входить в наборы дополнительных программных
    инструментов ( Resource Kit Windows XP ) Простейшая версия -
    CHOICE.COM
    Скачать (1.7кб), работающая во
    всех ОС семейства Windows.

    CHOICE выдает пользователю текстовое сообщение и ожидает выбора одного из заданных
    вариантов ответа (нажатия клавиш на клавиатуре). По результатам выбора формируется
    переменная ERRORLEVEL, значение которой равно порядковому номеру выбора. По умолчанию
    вариантов выбора два - Y или N. Если ответ равен Y - то ERRORLEVEL=1, если N - то
    ERRORLEVEL=2. Можно использовать более 2-х вариантов выбора и есть возможность
    задать выбор по умолчанию, когда пользователь за определенное время не нажал
    ни одной клавиши. Формат командной строки:



    CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]


    /C[:]choices   -   определяет допустимые варианты выбора. Если не задано - YN

    /N                 -   не выдавать варианты выбора.

    /S                  -   строчные и заглавные буквы отличаются.

    /T[:]c,nn        -   Выбор по умолчанию равен "c"через "nn"секунд

    text                - Строка текста выводимая в качестве запроса


    Создадим командный файл, демонстрирующий использование CHOICE.
    Он будет реагировать на нажатие клавиш "1","2",3"и "0" .
    При нажатии "0"выполняется завершение, а при нажатии остальных - сообщение пользователю. Если в
    течении 10 секунд ничего не нажато - завершение.




    @ECHO OFF

    :CHOICE

    CHOICE /C:1230 /T:0,10 Ваш вариант

    IF %ERRORLEVEL% EQU 4 GOTO EXIT

    echo Ваш выбор=%ERRORLEVEL%

    GOTO CHOICE

    :EXIT


        Теперь, используя CHOICE вы можете создавать командные файлы, логика работы
    которых может определяться пользователем.






    Задержки в командных файлах



       
    Когда-то, еще в DOS, для организации ожидания в командном файле использовалась команда SLEEP, но затем она почему-то перекочевала из стандартного установочного набора
    Windows в дополнительный Resource Kit. Можно просто скопировать его оттуда в каталог \system32
    и использовать в ваших командных файлах.

    :
    SLEEP N     - где N - количество секунд для задержки.


        Если же Resource Kit нет под рукой, можно воспользоваться ранее рассмотренной
    командой CHOISE без вывода текста и с автоматическим формированием ответа через
    nn секунд (1-99):


    choice.com /T:y,10 /N     - задержка на 10 секунд


        Более удобный способ основан на использовании утилиты ping.exe для петлевого интерфейса. Пинг для петлевого интерфейса (имя хоста -
    localhost или IP- адрес 127.0.0.1) выполняется без реальной передачи данных, т.е.
    практически мгновенно, а интервал между посылкой icmp-пакетов составляет 1 секунду. Указывая
    количество "пингов"с помощью ключа "-n"можно получить задержку на n секунд:


    ping 127.0.0.1 -n 30 > nul     - даст задержку на 30 секунд

    Перенаправление вывода команды ping на фиктивное устройство nul ( > nul ) позволяет убрать сообщения утилиты ping.exe с экрана.


    В составе команд CMD Windows 7 имеется команда TIMEOUTдля организации режима ожидания заданного интервала времени, либо до нажатия любой клавиши на клавиатуре. Описание команды - по ссылке "Список команд CMD Windows"








    Определение доступности IP-адреса



       
    Для проверки доступности сетевого узла используется упоминаемая выше стандартная утилита ping.exe. Утилита выполняет отправку ICMP-пакета на проверяемый узел (эхо-запрос) и ожидает ответный пакет (эхо-ответ). Результат проверки никак не отражается в переменной ERRORLEVEL и может быть получен только в данных стандартного вывода ping. Ненулевое значение ERRORLEVEL утилита ping.exe формирует только в том случае, если заданы ошибочные параметры командной строки. Иными словами, в некоторых случаях, нужный результат выполнения определенной команды нельзя определить по значению переменной ERRORLEVEL, и приходится анализировать, например, результат текстового вывода.


    Если внимательно посмотреть на сообщения программы ping.exe при опросе доступного и недоступного узла, то можно заметить, что они значительно отличаются :



    ping 456.0.0.1
    - ping на несуществующий адрес


    Ответ на такую команду может отличаться от конкретной версии утилиты, и
    может быть приблизительно таким



    При проверке связи не удалось обнаружить узел 456.0.0.1. Проверьте имя узла и повторите попытку.





    ping yandex.ru
    - ping на адрес узла yandex.ru


    Ответ на ping доступного узла:



    Обмен пакетами с yandex.ru [87.250.250.11] по 32 байт:

    Ответ от 87.250.250.11: число байт=32 время=10мс TTL=55



    Таким образом, для решения задачи определения доступности узла в командном файле, достаточно проанализировать характерные слова в выводе ping.exe при успешном ответе. Наиболее характерно в данном случае наличие слова TTL. Оно никогда не встречается при возникновении ошибки и состоит всего лишь из символов английского алфавита.
    Для поиска "TTL"в результатах ping.exe удобнее всего объединить ее выполнение в цепочку с командой поиска строки символов FIND.EXE (конвейер ping и find). Справку по использованию можно получить командой



    find /?





    Поиск текстовой строки в одном или нескольких файлах.


    FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "строка" [[диск:][путь]имя_файла[ ...]]


    /V Вывод всех строк, НЕ содержащих заданную строку.

    /C Вывод только общего числа строк, содержащих заданную строку.

    /N Вывод номеров отображаемых строк.

    /OFF[LINE] Не пропускать файлы с установленным атрибутом "Автономный".

    /I Поиск без учета регистра символов.

    "строка"Искомая строка.

    [диск:][путь]имя_файла

    Один или несколько файлов, в которых выполняется поиск.


    Если путь не задан, поиск выполняется в тексте, введенном с клавиатуры

    либо переданном по конвейеру другой командой.


    Как видно из справки, find.exe можно использовать для поиска нужной строки символов в тексте, переданном по конвейеру командой ping.exe. Если текст найден, значение переменной ERRORLEVEL будет равно 0



    ping -n 1 COMPUTER | find /I "TTL"> nul

    if %ERRORLEVEL%==0 goto LIVE

    ECHO computer не доступен

    подпрограмма обработки недоступного состояния

    ...

    Exit

    :LIVE - начало подпрограммы обработки состояния доступности узла

    ...

    ...





    В конвейер добавлена команда перенаправления стандартного вывода на
    фиктивное устройство nul, т.е. подавление вывода.
    Ключ -n 1задает однократный опрос узла COMPUTER для ping.exe.













    Определение текущей версии Windows.



       
    Так же, как и в предыдущем примере, для определения версии операционной системы в процессе выполнения командного файла, можно воспользоваться поиском определенных фрагментов текста в результатах выполнения команд, отображающих сведения о системе. Например, во всех операционных системах семейства Windows ( и даже в DOS ) существует специальная команда VER, предназначенная для отображения сведений о версии ОС. В результате выполнения команды, например, в среде Windows XP, отображается текст:


    Microsoft Windows XP [Версия 5.1.2600]


    В среде Windows 7, текст отличается:


    Microsoft Windows [Version 6.1.7600]


    Таким образом, результат выполнения команды VER в среде разных версий Windows, всегда содержит определенный текст, характерный только для данной ОС, и задача определения версии решается довольно просто:


    @echo off
    set curr_OS=
    REM
    ver | find /i "5.0"
    if %errorlevel% == 0 set curr_OS=Windows 2000
    REM
    ver | find /i "5.1"
    if %errorlevel% == 0 set curr_OS=Windows XP
    REM
    ver | find /i "5.2.3"
    if %errorlevel% == 0 set curr_OS=Windows Server 2003
    REM
    ver|find /i "6.0"
    if %errorlevel% == 0 set curr_OS=Windows Vista
    REM
    ver | find /i "6.1">nul
    if %errorlevel% == 0 set curr_OS=Windows 7
    REM
    if "%curr_OS%"=="" set curr_OS=Unknown
    echo Текущая версия ОС - %curr_OS%
    




    Можно также воспользоваться более информативным выводом команды NET CONFIG WORKSTATION. При выполнении в среде Windows XP вывод команды представляет собой следующий текст:



    Имя компьютера                                \\COMP1
    Полное имя компьютера                         COMP1.Mydomain
    Имя пользователя                              USER2
    
    Активная рабочая станция на                   
    	NetbiosSmb (000000000000)
    	NetBT_Tcpip_{F53DEAF8-0AF5-4875-B565-8ED55C594769} (000D87009D28)
    
    Версия программы                              Windows 2002
    
    Домен рабочей станции                         Mydomain
    DNS-имя домена рабочей станции                Mydomain
    Домен входа                                   Mydomain
    
    Интервал ожидания открытия COM-порта (с)      0
    Отсчет передачи COM-порта (байт)              16
    Таймаут передачи COM-порта (мс)               250
    Команда выполнена успешно. 
    




    Для среды Windows 7 результат выполнения команды выглядит так:



    Имя компьютера                                \\COMP1
    Полное имя компьютера                    COMP1.Mydomain
    Имя пользователя                              user2
    
    Активная рабочая станция на                   
    	NetBT_Tcpip_{F53DEAF8-0AF5-4875-B565-8ED55C594769} (000D87009D28)
    
    Версия программы                              Windows 7 Professional
    
    Домен рабочей станции                         Mydomain
    Домен входа                                   Mydomain
    
    Интервал ожидания открытия COM-порта (с)      0
    Отсчет передачи COM-порта (байт)              16
    Таймаут передачи COM-порта (мс)               250
    Команда выполнена успешно.
    



    Как видим, строка Версия программы . . . тоже может быть использована для определения версии Windows, в среде которой выполняется командный файл. Кроме того, в результатах выполнения команды NET CONFIG WORKSTATIONдля серверных версий Windows всегда присутствует слово Server.


    @echo off
    set curr_OS=
    REM
    net config workstation | find /i "Windows 2000"
    if %errorlevel% == 0 set curr_OS=Windows 2000
    REM
    net config workstation | find /i "Windows 2002"
    if %errorlevel% == 0 set curr_OS=Windows XP
    REM
    net config workstation | find /i "Server 2003"
    if %errorlevel% == 0 set curr_OS=Windows Server 2003
    REM
    net config workstation|find /i "Windows Vista"
    if %errorlevel% == 0 set curr_OS=Windows Vista
    REM
    net config workstation | find /i "Windows 7">nul
    if %errorlevel% == 0 set curr_OS=Windows 7
    REM Плюс поиск по "Professional"
    net config workstation | find /i "Версия программы" | find "Professional"
    if errorlevel 0 if not errorlevel 1 set curr_OS=Windows 7 PRO
    REM Если версия неизвестна:
    if "%curr_OS%"=="" set curr_OS=Unknown
    echo %curr_OS%
    









    Поиск компьютеров с запущенным приложением




       
    Для реализации этого скрипта используются утилиты из пакета PSTools
    (краткое описание).

    Создадим командный файл, выполняющий поиск в локальной сети компьютеров с выполняющейся
    программой,
    имя которой (начальная часть имени) задается в качестве параметра при запуске,
    например, game . При обнаружении будет послано сообщение на компьютер
    ADMINCOMP и обнаруженное приложение будет принудительно завершено. Для поиска будем использовать утилиту Pslist.exe и анализировать ее код возврата.
    Значение переменной ERRORLEVEL равное нулю означает, что утилита обнаружила на
    удаленном компьютере процесс, удовлетворяющий условиям поиска. Имя процесса для
    поиска будем задавать в качестве параметра при запуске командного файла. Присвоим нашему командному файлу имя psl.bat.
    Запуск с параметром будет выглядеть следующим образом:

    psl.bat game


       
    Для начала, нужно проверить, задан ли параметр в командной строке при запуске, и,
    если не задан, выдадим сообщение пользователю и завершим выполнение. Если же параметр задан - перейдем на метку
    " PARMOK ":


    @echo off

    if "%1" NEQ "" GOTO PARMOK

    ECHO Нужно задать имя процесса для поиска

    exit

    :PARMOK



       
    Теперь нужно обеспечить последовательное формирование IP-адресов компьютеров для командной строки PSlist.
    Проще всего, это можно сделать с помощью присвоения временной переменной окружения (действительной
    только на время выполнения командного файла), значения постоянной составляющей адреса (например - 192.168.0.) и вычисляемого
    значения младшей части (например, в диапазоне 1-254).

    Например, будем считать, что нам необходимо просканировать компьютеры в диапазоне адресов:

    192.168.0.1   -   192.168.0.30:


    set IPTMP=192.168.0. - старшая часть адреса

    set /A IPLAST=1 - младшая часть. Ключ /A означает вычисляемое числовое выражение

    set IPFULL=%IPTMP%%IPLAST% - значение полного IP-адреса.

       
    Командная строка для PSlist будет выглядеть cледующим образом:

    pslist \\%IPFULL% %1

       
    Теперь осталось только циклически запускать PSlist, прибавляя в каждом цикле единицу к младшей части адреса,
    пока ее значение не достигнет 30 и анализировать значение ERRORLEVEL после выполнения. Для анализа результата будем
    выполнять переход командой:

    GOTO REZULT%ERRORLEVEL%

    обеспечивающей переход на метку REZULT0 при обнаружении процесса и на REZULT1 - при его отсутствии.

       
    Окончательное содержимое командного файла:



    @echo off

    if "%1" NEQ "" GOTO PARMOK

    ECHO Нужно задать имя процесса для поиска

    exit

    :PARMOK

    set IPTMP=192.168.0.

    rem Зададим начальное значение "хвоста " IP- адреса

    set /A IPLAST=1

    rem M0 - метка для организации цикла

    :M0

    rem Переменная IPFULL - полное значение текущего IP-адреса

    set IPFULL=%IPTMP%%IPLAST%

    rem Если "хвост "больше 30 - на выход

    IF %IPLAST% GTR 30 GOTO ENDJOB

    pslist \\%IPFULL% %1

    GOTO REZULT%ERRORLEVEL%


    :REZULT0

    rem Если найдено приложение- отправим сообщение на ADMINCOMP

    net send ADMINCOMP Запущено %1 - %IPFULL%

    rem И завершим приложение с помощью PSkill


    pskill \\%IPFULL% %1

    :REZULT1

    rem Сформируем следующий IP-адрес

    set /A IPLAST=%IPLAST% + 1

    rem Перейдем на выполнение следующего шага

    GOTO M0

    rem Завершение работы

    :endjob

    exit




       
    В заключение добавлю, что для того, чтобы этот скрипт работал, PSlist.exe и PSkill.exe должны быть доступны в путях
    поиска исполняемых файлов, например в каталоге WINDOWS\SYSTEM32. Пользователь, запускающий его, должен обладать правами администратора по отношению к сканируемым компьютерам.
    И, если текущий пользователь таковым не является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно добавить ключи, задающие
    имя пользователя и пароль.







    Поиск компьютеров с запущенным приложением по списку



       
    В предыдущем примере использовался прямой перебор IP-адресов компьютеров в
    локальной сети, что не всегда удобно, поскольку в процедуру опроса оказываются
    вовлечены и выключенные компьютеры. Решим задачу другим способом. Создадим текстовый
    файл со списком компьютеров и опросим их по этому списку.

       
    Список можно получить из сетевого окружения с использованием команды:

    net.exe view > comps.txt

    После выполнения такой команды файл comps.txtбудет содержать список
    следующего вида:



    Имя сервера                 Заметки

                    < 2 пустых строки >


    -------------------------------------------------------------------------------

    \\AB1

    \\AB2

    \\ALEX

    \\BUHCOMP

    \\PC2

    \\SA

    \\SERVER

    Команда выполнена успешно.


       
    Обрабатывать содержимое этого текстового файла будем с помощью команды
    FOR
    с ключом /F:


    FOR /F ["ключи"] %переменная IN (имя файла) DO команда [параметры]



       
    Данная команда позволяет получить доступ к строкам в текстовом файле с использованием ключей:


    skip=n                - пропустить n строк от начала файла (в нашем случае - 4 строки)

    eol=< символ >   - не использовать строки, начинающиеся с заданного символа.
    (в нашем случае - пропустить последнюю строку, начинающуюся с символа "К" - "Команда выполнена успешно"

    tokens=n            - брать для обработки n-е слово в строке (в нашем случае - 1-е слово)


    Окончательный вид команды:



    FOR /F "eol=К skip=4 tokens=1 " %%I IN (comps.txt) DO (

    pslist.exe -u admin -p pass %%I %1

    IF NOT ERRORLEVEL 1 net.exe send ADMINCOMP %%i %1

    )


           Обратите внимание -
    в пакетных файлах для переменных команды FOR используется два знака процента (запись
    %%переменнаявместо %переменная) и имена переменных
    учитывают регистр букв (%iотличается от %I).

           
    Работать это будет следующим образом - пропускаются первые 4 строки текстового файла
    со списком компьютеров, и далее в цикле переменной I присваивается значение первого
    слова (текст от начала строки до разделителя - пробела), выполняется утилита
    PSlist.exe, для которой в качестве имени компьютера используется значение этой переменной.
    Если ERRORLEVEL менее 1 - задача с искомым именем присутствует в списке процессов и
    выполняется отправка сообщения с помощью NET SEND.

           
    Окончательное содержимое командного файла:



    @echo off

    if "%1" NEQ "" GOTO PARMOK

    ECHO Нужно задать имя процесса для поиска

    exit

    :PARMOK

    REM

    REM Создадим текстовый файл comps.txt со списком компьютеров с помощью NET.EXE VIEW

    net view /DOMAIN:MyDomain > comps.txt

    REM

    REM FOR /F "параметры" - использование данных из файла

    REM eol=К - не использовать строки, начинающиеся с "К" - "Команда выполнена успешно"

    REM skip=4 - пропустить первые 4 строки в файле

    REM tokens=1 - брать для обработки 1-е слово в строке

    REM

    FOR /F "eol=К skip=4 tokens=1 " %%i in (comps.txt) do (

    pslist.exe -u admin -p pass %%i %1

    IF NOT ERRORLEVEL 1 net.exe send %COMPUTERNAME% Компьютер - %%i процесс - %1

    )




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



       
    Предыдущий пример натолкнул меня на мысль сделать пакетный файл для быстрого
    выключения всех компьютеров в сети. Выключение производится утилитой PsShutdown.exe
    (описание в статье "Утилиты пакета PSTools" ). Как и в предыдущем примере,
    сначала создается файл со списком компьютеров на основе сетевого окружения, а затем
    выполняется их поочередное выключение, при условии, что компьютер не свой (иначе он может
    выключиться до окончания выполнения командного файла). Содержимое файла:



    rem @echo off

    REM Здесь нужно задать

    REM имя домена или рабочей группы для которых строится список машин для выключения

    set MyDomain=имя домена

    REM

    REM Создадим текстовый файл comps.txt со списком компьютеров с помощью NET VIEW

    net view /DOMAIN:%MyDomain% > comps.txt

    REM

    REM FOR /F "параметры" - использование данных из файла

    REM eol=К - не использовать строки, начинающиеся с "К" - "Команда выполнена успешно"

    REM skip=4 - пропустить первые 4 строки в файле

    REM tokens=1 - брать для обработки 1-е слово в строке

    FOR /F "eol=К skip=4 tokens=1 " %%i in (comps.txt) do (

    REM Свой компьютер выключать не будем

    REM Если имя компьютера не равно COMPUTERNAME - выключаем

    IF /I %%i NEQ %COMPUTERNAME% psshutdown -k -t 0 %%i

    )


       
    Вам нужно только подредактировать строку:

    set MyDomain=

    указав имя домена и, при необходимости, добавить параметры -u -p для psshutdown.exe .

       
    В реальной жизни из списка выключаемых компьютеров нужно
    исключить несколько штук, для чего удобно использовать команду FINDв
    цепочке с net.exe в скрипте формирования списка на основе сетевого окружения. Данная команда
    используется для поиска строк в текстовом файле по шаблону. Ключ /V используется для поиска строк
    несовпадающих с шаблоном. Для выключения компьютеров, исключая server1...server4
    удобно использовать такой вариант:


    net view | find "\\" | find /v "сервер1" | find /v "сервер2" | find /v "сервер3" | find /v "сервер4"> comps.txt

    FOR /F "tokens=1 " %%i in (comps.txt) do shutdown.exe -f -s -m %%i


    http://ab57.ru/cmd.html

    Командные файлы Windows часть 1

    $
    0
    0


    Общие сведения о командном процессоре Windows.
    Использование переменных в командных файлах.
    Передача параметров командному файлу.
    Переходы и метки.
    Примеры командных файлов:
        - Своя команда для создания новых файлов.
        - Присвоение съемному диску одной и той же буквы.
        - Создание архива, имя которого содержит дату и время.
        - Выполнение только в заданный интервал времени.
        - Пример создания архива каталога пользователя.
        - Изменение даты и времени для файлов и папок.
        - Выполнение команд по расписанию.
        - Запуск и остановка служб Windows в командной строке.
        - Выдача на экран значения ERRORLEVEL.
        - Диалог с пользователем.
        - Задержки в командных файлах.
        - Определение доступности IP-адреса.
        - Определение текущей версии Windows.
        - Поиск в локальной сети компьютеров с запущенным приложением.
        - Поиск компьютеров с запущенным приложением по списку на основе сетевого окружения.
        - Выключение компьютеров по списку, созданному на основе сетевого окружения.
        - Поиск в локальной сети включенных компьютеров.
        - Работа с дисками, файлами и каталогами.
        - Работа с графическими приложениями из командной строки.
        - Перекодировка текстовых файлов .
    Часто встречающиеся ошибки при написании командных файлов.
    Использование .bat и .cmd в сценариях регистрации пользователей.


    Общие сведения о командном процессоре Windows.





       
    Командные файлы (скрипты, сценарии, батники) - это обычные текстовые файлы с расширением .bat или .cmd, строки которых представляют собой специальные команды командного процессора (интерпретатора команд ) и/или имена исполняемых файлов. Командный процессор – это специальная программа, являющаяся обязательным элементом почти любой операционной системы, главным назначением которого, является предоставление пользователю средства для выполнения определенных программ без их компиляции и создания исполняемых файлов. Для операционных систем DOS и Windows9X в качестве интерпретатора команд использовался командный процессор command.com, для всех остальных ОС семейства Windows ( NT/2k/XP/Vista/7/8 и старше) - cmd.exe. Несмотря на непрерывное совершенствование средств создания и выполнения сценариев с использованием объектно-ориентированных языков, обычная командная строка и простые командные файлы, по-прежнему остаются основным инструментом для выполнения рутинных действий, диагностики сетевых проблем, автоматизации процессов резервного копирования и т.п. При всех недостатках реализации командного процессора в Windows, достойной альтернативы ему нет, и очевидно в ближайшем будущем, не будет.


       
    Строки командных файлов могут содержать специфические команды самого
    процессора команд (FOR, ECHO, REM и т.п.) или имена исполняемых модулей
    (net.exe, regedit.exe, sc.exe) Командный процессор может быть запущен в интерактивном режиме через Пуск - Выполнить - CMD.EXE. В данном режиме, вы увидите окно консоли с приглашением к вводу команд. Возможный список большинства консольных команд можно получить введя:



    HELP

    Справочную информацию по конкретной команде можно получить, указав ее название в качестве параметра команды HELP:



    HELP Имя команды


    Если вы работаете в русифицированной версии Windows, то учтите, что в среде командного процессора символы национального алфавита используются в DOS-кодировке. Для переключения между кодовыми страницами Windows и DOS используется команда


    CHCP номер страницы

    CHCP 866 - использовать кодовую страницу 866 (DOS)

    CHCP 1251 - использовать кодовую страницу 1251 (WINDOWS)


    Для просмотра и редактирования командных файлов, содержащих символы русского алфавита нужно использовать редактор с поддержкой DOS-кодировки. Если вы используете стандартное приложение "Блокнот" (notepad.exe), то для правильного
    отображения символов русского алфавита нужно выбрать шрифт Terminal, с
    помощью меню Правка - Шрифт...


    Внешний вид окна CMD.EXE (консоли Windows) можно изменить с помощью команды


    COLOR


    В качестве аргументов для команды используются 2 шестнадцатеричные цифры, задающие цвет фона и цвет символа.


    COLOR F0 - черные символы на белом фоне.


    COLOR 0E - светло-желтые символы на черном фоне.


    HELP COLOR - подсказка для команды COLOR.


    Работа с командным процессором предполагает использование двух устройств - устройства ввода (клавиатуры) и устройства вывода (дисплей). Однако, имеется возможность изменить стандартно используемые устройства ввода-вывода с помощью специальных символов - символов перенаправления


    > - перенаправление вывода

    < - перенаправление ввода


    Для вывода справки не на экран а, например, в файл с именем help.txt, можно использовать следующую команду:


    HELP > help.txt

    При выполнении данной команды, в текущем каталоге будет создан файл с именем help.txt, содержимым которого будет результат вывода команды HELP. Если файл help.txt существовал на момент выполнения команды, его содержимое будет перезаписано. Для того, чтобы дописать данные в конец существующего файла, используют удвоение символа перенаправления вывода - ">>"


    Пример:


    HELP GOTO > myhelp.txt - в файл myhelp.txt будет выдана справка по использованию команду GOTO

    HELP COLOR >> myhelp.txt - в конец файла myhelp.txt будет дописана справка по использованию команды COLOR


    Простейший пример перенаправления ввода:


    cmd.exe < commands.txt
    - командный процессор не будет ожидать ввода команд с клавиатуры, а считает их из файла commands.txt



       
    При запуске командного процессора можно указать конкретную команду в качестве аргумента командной строки:


    cmd.exe /C HELP FOR - выполнить команду HELP FOR и завершиться (ключ /C)


    cmd.exe /K HELP FOR - выполнить команду HELP FOR и перейти в режим ожидания дальнейшего ввода команд (ключ /K)


    Подробную справку по использованию cmd.exe можно получить, введя в качестве аргумента ключ /?


    cmd.exe /?



    Кроме символов перенаправления ввода-вывода в командной строке могут
    использоваться символы объединения команд - && и ||


    cmd.exe /C "HELP IF > nul"&& Echo HELP Executed || Echo HELP Not Executed
    - выполнить команду HELP IF и при успешном результате выполнить
    команду Echo HELP Executed, а при неуспешном - Echo HELP Not Executed.
    Команды, объединяемые для
    выполнения с помощью конструкции && , не нужно заключать в
    двойные кавычки. Выполнение строки


    cmd.exe /C "HELP IF > nul"&& Echo HELP Executed || Echo HELP Not Executed



    завершится сообщением HELP Executed, а выполнение


    cmd.exe /C "HELP uIF > nul"&& Echo HELP Executed || Echo HELP Not Executed


    где неверно задан аргумент команды HELP ( uIF ), завершится сообщением
    HELP Not Executed



    Файлы с расширением .bat или .cmd в среде Windows стандартно открываются
    командным процессором аналогично примеру, где список команд считывается не с
    устройства ввода, а из текстового файла.


    Использование переменных в командных файлах.


       

    Существует такое понятие, как переменные окружения
    (environments)
    - это переменные, значения которых характеризуют среду,
    в которой выполняются команда или пакетный файл. Иногда их называют
    переменными среды. Принимаемые значения этих переменных формируются при
    загрузке, регистрации пользователя в системе, старте или завершении
    некоторых приложений, и, кроме того, могут быть заданы с помощью специальной
    команды SET




    SET переменная=строка




    переменная - имя переменной среды.

    строка - строка символов, присваиваемая указанной
    переменной.



    Например, командная строка

    SET myname=Vasya

    создает переменную myname, принимающую значение Vasya.




    Значение, присвоенное какой-либо переменной, доступно для обработки в
    командных
    файлах, при использовании ее имени, заключенного в знаки
    процента - % . Например
    команда выдачи текста на дисплей ECHO в виде:

    ECHO date - выведет на экран слово "date",
    а команда

    ECHO %date% выведет на экран значение
    переменной date - текущую дату в формате операционной системы.



    С помощью команды SET обычно задается и модифицируется путь поиска
    исполняемых программ
    - переменная окружения PATH.


    SET PATH=C:\Windows;C:\windows\system32

    После выполнения данной команды, поиск исполняемых файлов будет выполняться в
    каталоге C:\Windows, и, если результат неуспешен, в
    C:\windows\system32

    Допустим Вам необходимо выполнить программу myedit.exe, размещенную в
    каталоге C:\NewProgs

    Если в командной строке не задан полный путь, а только имя
    исполняемого файла - myedit.exe

    то сначала будет выполняться поиск файла myedit.exe в текущем каталоге, и если
    он не будет найден - в каталогах, список которых задается значением переменной
    PATH. Символ ;является разделителем элементов в списке путей поиска.
    Если в приведенном примере, текущим каталогом не является
    C:\NewProgs, и в остальных каталогах, заданных значением переменной
    PATH. нет исполняемого файла myedit.exe, то запуск приложения myedit.exe
    завершится ошибкой. Однако, если есть необходимость его запуска без указания полного
    пути и при любом значении текущего каталога, можно модифицировать значение
    переменной PATH


    Команда

    SET PATH=C:\NewProgs;%path%

    изменит текущее значение PATH,
    добавив каталог C:\NewProgs в начало списка.




       
    Выполнение команды SET без параметров позволяет получить текущие
    значения переменных окружения:



    NUMBER_OF_PROCESSORS=1 - количество процессоров


    OS=Windows_NT- тип ОС


    Path=C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Far - путь поиска исполняемых файлов.


    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - расширения для исполняемых файлов.


    PROCESSOR_ARCHITECTURE=x86 - архитектура процессора.


    PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD - идентификатор процессора.


    PROCESSOR_LEVEL=6 - уровень (номер модели) процессора.


    PROCESSOR_REVISION=0801 - версия процессора.


    ProgramFiles=C:\Program Files - путь к папке "Program Files"


    PROMPT=$P$G - формат приглашения командной строки $P - путь для текущего каталога $G - знак ">".


    SystemDrive=C: - буква системного диска.


    SystemRoot=C:\WINDOWS - каталог ОС Windows.






    Значение некоторых переменных по команде SET не выдаются. В основном, это переменные, принимаемые значения которых динамически изменяются:




    %CD% - Принимает значение строки текущего каталога.



    %DATE% - Принимает значение текущей даты.



    %TIME% - Принимает значение текущего времени.



    %RANDOM% - Принимает значение случайного десятичного числа в диапазоне 1 -32767.



    %ERRORLEVEL% - Принимает текущее значение кода завершения задачи ERRORLEVEL



    %CMDEXTVERSION% - Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.



    %CMDCMDLINE% - Принимает значение строки, которая вызвала
    командный процессор.







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


    ECHO %переменная%

    ECHO %CD% - отобразить имя текущего каталога

    ECHO %TIME% - отобразить текущее время

    ECHO %ERRORLEVEL% -
    отобразить результат выполнения предыдущей команды.


    Значения, принимаемые переменными окружения, могут быть расширены с помощью
    специального признака - символа " ~ ", что получить частичное
    значение (расширение переменной), или изменить его заменой какой-либо части.
    Примеры использования расширений переменных рассмотрены ниже.




    В состав дополнительных средств Windows 2000/XP, и в комплект дистрибутива Windows 7 входит специальная утилита для формирования пользовательских и системных переменных окружения SetX, позволяющая записывать имена и значения переменных в реестр . Ссылка "Список команд CMD Windows"в конце статьи.




    Передача параметров командному файлу.


       
    Очень полезной особенностью работы с командными файлами является
    возможность передавать параметры командной строки и использовать их
    значения в операциях внутри самого командного файла.


    BAT-файл параметр1 параметр2 ...
    параметрN



    В самом командном файле первый параметр будет доступен как переменная %1,
    второй - %2 и т.п. Путь и имя самого командного файла доступно как переменная %0.
    Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных при его запуске параметров командной строки. Для вывода
    текста на экран используется команда ECHO текст ,
    однако если "текст"заменить на %0, - то будет выдано имя командного файла, %1 - первый аргумент, заданный в строке запуска, %2 - второй и т.д.

    Создаем, например, командный файл params.bat следующего содержания:



    echo off
    echo Это командный файл %0

    echo Первый параметр=%1

    echo Второй параметр=%2

    echo Третий параметр = %3




    и запускаем его на выполнение следующей командой:



    params.bat FIRST second "two words"




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

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


       
    Для проверки наличия каких-либо входных параметров, передаваемых
    командному файлу, можно проверить, является ли значение переменной %1
    пустым:



    if "%1" EQU "" goto error

    ....

    ...

    :error

    Echo Должен быть задан хотя бы один входной параметр

    exit




       
    В командных файлах большого размера трудно обойтись без справочной
    информации в виде комментариев, для чего используется конструкция


    REM пробел текст

    Строки, начинающиеся с REM пробел, командным процессором игнорируются.





    rem ECHO OFF выключает режим вывода содержания строк командного
    файла на экран

    REM будет выводиться только результат их выполнения.

    ECHO OFF

    echo Первый параметр=%1

    echo Второй параметр=%2

    echo Третий параметр = %3




    Если к имени команды первым символом добавляется @,
    то независимо от режима ECHO (ON или OFF), вывод обрабатываемой строки не
    выполняется. Попробуйте в данном примере "ECHO OFF"заменить на "@ECHO OFF" -
    результат говорит сам за себя. Строка, которая выключает режим вывода,
    не будет выдаваться на экран. Вывод эха на экран устанавливается по
    команде ECHO ON и, обычно, используется в целях диагностики.




    rem ECHO ON включает режим вывода содержания строк командного
    файла на экран

    REM будет сама командная строка и результат ее выполнения,

    REM но строки, начинающиеся символом @ выводиться не будут
    ECHO ON

    @echo Первый параметр=%1

    @echo Второй параметр=%2

    @echo Третий параметр = %3





    Переходы и метки.





       
    В командных файлах можно использовать команды условного перехода,
    меняющие логику их работы в зависимости от выполнения определенных условий.
    Для иллюстрации приемов использования условных переходов создадим командный
    файл, целью которого будет присвоение заранее определенной буквы для
    съемных носителей, в качестве которых будут использоваться флэш-диски.
    Условия таковы - есть 2 флэш-диска, один из которых должен быть виден в
    проводнике как диск X: а второй - как диск Y: независимо от того, в какой
    порт USB они подключены и какие буквы присвоены им операционной системой.
    Будем считать, что реальные диски могут быть подключены как F: или G:
    Опознавание дисков будем выполнять по наличию файла с определенным именем
    (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь
    необычно):


    Flashd1.let - на первом диске


    Flashd2.let - на втором


    Таким образом, задача командного файла заключается в том, чтобы проверить
    наличие на сменных дисках F:и G:файлов Flashd1.let
    или Flashd2.letи, в зависимости от того, какой из них присутствует,
    присвоить диску букву X:или Y:



    Для поиска файла на диске воспользуемся командой IF EXIST:

    IF EXIST имя_файла команда

    В качестве команды проще всего воспользоваться SUBST, сопоставляющей имя диска и каталог.

    SUBST X: C:\ - - создать виртуальный диск
    X:, содержимым которого будет корневой каталог диска C:


       
    Для решения задачи, создаем командный файл, например setletter.bat, следующего содержания:



    @ECHO OFF

    IF EXIST G:\flashd1.let SUBST X: G:\

    IF EXIST F:\flashd1.let SUBST X: F:\

    IF EXIST G:\flashd2.let SUBST Y: G:\

    IF EXIST F:\flashd2.let SUBST Y: F:\




       
    После выполнения этого командного файла у вас появятся диски X: и Y:

    Однако, если такой файл выполнить повторно,
    команда SUBST выдаст сообщение об ошибке - ведь диски X: и Y:
    уже существуют.


    Поэтому, желательно обойти выполнение SUBST, если виртуальные диски
    X: и Y: уже созданы, или удалять их, используя SUBST с параметром -d
    перед подключением. Попробуйте изменить командный файл setletter.bat с
    использованием команды перехода GOTO,
    осуществляющей передачу управления строке пакетного файла на указанную
    метку.



    GOTO метка

    В качестве метки используется строка символов, начинающаяся
    с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало
    сообщений об ошибке:




    @ECHO OFF

    REM если не существует X: - то перейдем на метку SETX

    IF NOT EXIST X:\ GOTO SETX

    REM если существует X: - перейдем на проверку наличия Y:

    GOTO TESTY

    :SETX

    IF EXIST G:\flashd1.let SUBST X: G:\

    IF EXIST F:\flashd1.let SUBST X: F:\

    :TESTY

    REM если Y: существует - завершим командный файл.

    IF EXIST Y:\ GOTO EXIT

    IF EXIST G:\flashd2.let SUBST Y: G:\

    IF EXIST F:\flashd2.let SUBST Y: F:\

    REM выход из командного файла

    :EXIT






    Конечно, данный пример не может считаться образцом программирования, но
    главная цель, в данном случае, это не написание оптимального командного
    сценария, а пояснения принципов использования меток и переходов. Далее по
    тексту, я старался, насколько это возможно, использовать именно такой
    подход - главное не оптимальность кода командного файла, а его максимальная
    простота для понимания.


    При выполнении измененного таким образом командного файла, сообщение об
    ошибке при выполнении SUBST исчезнет.



    Одним из важнейших приемов при написании сложных командных файлов
    является анализ успешности выполнения конкретной команды или программы.
    Признаки ошибок при выполнении команд можно отслеживать, анализируя
    специальную переменную ERRORLEVEL ,
    значение которой формируется при выполнении большинства программ.
    Обычно ERRORLEVEL равно нулю, если программа завершилась без ошибок и
    единице - при возникновении ошибки. Могут быть и другие значения, если они
    предусмотрены в выполняемой программе.


       
    В качестве команды в строке командного файла можно использовать также
    командный файл. Причем, для передачи с возвратом обратно к точке выполнения
    вызывающего командного файла используется
    команда CALL. Попробуйте создать командный файл test.bat, следующего содержания:



    @ECHO OFF

    ECHO Вызов 1.bat

    CALL 1.bat

    ECHO Возврат.




    В этом же каталоге, создайте второй файл под именем 1.bat, содержащий
    команду



    PAUSE
    , приостанавливающую выполнение командного файла до
    нажатия любой клавиши.




    @ECHO OFF

    pause





    При выполнении командного файла test.batбудет выдано на экран
    сообщение


    Вызов 1.bat


    и управление получит командный файл 1.bat с одной единственной командой
    pause. После начатия клавиши на клавиатуре управление будет возвращено
    вызвавшему командному файлу
    на строку "ECHO Возврат."и на экран будет выдано


    Возврат.


    Если же в файле test.bat убрать CALL, оставив "1.bat", то возврат
    выполняться не будет.


    Вызываемый командный файл может создавать переменные и присваивать им
    определенные значения, которые будут доступны для обработки в вызывающем
    файле. Попробуйте изменить файл test.bat на следующее содержимое:



    @ECHO OFF

    ECHO Вызов 1.bat

    CALL 1.bat

    ECHO Получено из файла %MYFILE% значение MYNUMBER=%MYNUMBER%.



    а в файле 1.bat на следующее



    @ECHO OFF

    SET MYFILE="Very good 1.bat"

    SET MYNUMBER=99




    Кстати, используя передачу управления командному файлу, можно организовать
    его зацикливание. Попробуйте добавить в конец файла test.bat строку:



    CALL test.bat



    Выйти из зацикливания командного файла можно по нажатию комбинации
    CTRL-Break.

    Возможно использование команды CALL для вызова процедуры внутри
    командного файла.
    В этом случае в качестве аргумента используется не имя внешнего файла, а
    метка:





    call :proc1

    ....

    :proc1

    ....

    exit

    ....





    Примеры командных файлов.





       
    Использование утилит командной строки и командных файлов нередко позволяют
    решить многие проблемы связанные с повседневной эксплуатацией компьютерной
    техники. Большинство системных администраторов и грамотных пользователей
    продолжают ими пользоваться, несмотря на то, что в Windows проявилось новое,
    более мощное и современное средство управления системой - WMI
    (Windows Management Instrumentation). Очевидно, не в последнюю очередь, это
    обусловлено простотой реализации и, тем не менее, - достаточной
    эффективностью использования командных файлов. Ниже приведены простые
    примеры с комментариями, которые демонстрируют некоторые возможности и
    способы применения .cmd и .bat


    Своя команда для создания новых файлов.


       
    В составе операционной системы Windows нет специальной команды для создания нового файла, но без нее можно легко обойтись несколькими способами:


    Копирование с клавиатуры в файл


    COPY CON myfile.txt


    При выполнении этой команды данные с клавиатуры (стандартное устройство CON - консоль) будут заноситься в файл myfile.txt. Нажатие клавиши F6 или комбинации CTRL-Z завершит вывод.



    Перенаправление вывода


    ECHO 1 > myfile.txt


    При выполнении этой команды будет создан файл myfile.txt, содержащий символ "1"


    Комбинация перенаправления ввода и перенаправления вывода:



    COPY CON > myfile.txt < xyz


    При выполнении этой команды, как и в первом случае, используется копирование
    с консоли в файл, но вместо ручного ввода данных с клавиатуры используется ввод с
    несуществующего файла xyz. Система выдаст сообщение, о том, что такого
    устройства или файла
    не существует, но пустой файл myfile.txt будет успешно создан.


    Еще проще использовать команду копирования из фиктивного устройства nulв файл. Использование устройства nul позволяет обойти стандартные операции ввода-вывода, которые для него реально не выполняются.


    COPY NUL myfile.txt


       

    При работе в командной строке часто приходится создавать новые пустые
    файлы, поэтому, стоит подготовить свой командный файл (например, с
    именем nf.bat),

    а имя нового создаваемого файла передавать ему в качестве параметра при
    запуске.



    Содержимое файла:


    @echo off

    REM Создание пустого файла, имя которого задано в строке запуска

    if "%1" EQU "" goto error

    copy nul %1

    goto exit

    :error

    ECHO ОШИБКА: Необходимо задать имя нового файла !

    :exit


       
    Для простоты использования, поместите этот командный файл в системный каталог
    (например, в C:\windows\system32) или любой другой, существующий в путях
    поиска, задаваемых значением переменной PATH). Теперь, в командной строке, находясь в любом каталоге можно одной командой создавать пустые файлы.


    Командная строка:



    nf.bat myfile.txt - создать файл с именем myfile.txt в текущем каталоге.

    nf.bat C:\myfile.txt - создать файл в корневом каталоге диска C:

    nf.bat "%USERPROFILE%\myfile.txt" - создать файл в каталоге профиля текущего пользователя.



    Расширение командного файла (.bat) можно не набирать и команда еще больше упрощается:


    nf myfile.txt


    В тексте командного файла присутствует проверка, задано ли имя
    создаваемого файла в командной строке (if "%1%" EQU "" goto error), и если не
    задано - выводится сообщение об ошибке и командный файл завершает
    свою работу.

    В качестве тренировки, попробуйте добавить в этот командный файл проверку
    на существование файла с именем, указанным в командной строке.



    Присвоение съемному диску одной и той же буквы.





       
    Задача заключается в том, чтобы съемный USB диск (флэш диск) был доступен
    всегда под одной и той же буквой, независимо от того, на каком компьютере он
    используется
    и как он подключен. Для ее решения воспользуемся уже упоминаемой выше
    командой SUBST, но реализуем присвоение новой буквы диску с
    использованием подстановочного значения переменной %0, создаваемой
    системой при каждом запуске командного файла.

    Выберем для съемного диска желаемую букву, например - X.


    Некоторые из переменных окружения, в том числе и переменная %0
    принимающая значение пути и имени выполняющегося командного файла, позволяют
    при определенной модификации с использованием специального признака -
    символа " ~ "получить ее частичное значение (расширение переменной).
    Например, не полный путь
    файла, а только его имя, или каталог расположения, или букву диска, с
    которого он был запущен или еще около десятка различных элементов, связанных
    с подстановочными значениями переменной %0.


    Имя диска, с которого
    был запущен командный файл доступно как переменная %~d0.

    Теперь создаем командный файл следующего содержания:

    @echo off

    subst X: %~d0\



    что означает - создать виртуальный диск X:, которому сопоставлен
    логический диск, являющийся частью пути данного командного файла.
    Если такой файл записать на флэшку, и выбрать присваиваемую букву диска
    поближе к концу алфавита (чтобы не оказалась занятой другим реальным дисковым
    устройством) то после его запуска, в системе будет создаваться новый диск
    всегда под одной и той же буквой.



    Дополнительное представление о подстановочных значениях
    переменной %0 можно получить из командного файла следующего
    содержания:


    @echo off

    ECHO ОБРАБАТЫВАЕТСЯ ФАЙЛ - %0

    ECHO Дата/время создания/изменения командного файла - %~t0

    ECHO Путь командного файла - "%~f0"

    ECHO Диск командного файла - %~d0

    ECHO Каталог командного файла - "%~p0"

    ECHO Имя командного файла - %~n0

    ECHO Расширение командного файла - %~x0

    ECHO Короткое имя и расширение - %~s0

    ECHO Атрибуты командного файла - %~a0

    ECHO Размер командного файла - %~z0




    Создание архива, имя которого содержит дату и время.



       
    Решим следующую задачу - нужно создать архив файлов, находящихся в каталоге
    C:\Program Files\FAR. Имя архивного файла должно состоять из текущего времени
    (часы.минуты.секунды - ЧЧ.ММ.СС.rar), и помещен он должен в новый каталог, имя которого должно состоять из текущей даты
    (день.месяц.год - ДД.ММ.ГГГГ). Для архивирования будем использовать архиватор RAR.
    Формат запуска для создания архива:


    RAR a -r < путь и имя архива > < Путь и имя архивируемых данных >


    a - команда создания архива.

    -r - ключ, определяющий архивирование подкаталогов (т.к. в исходной папке есть подкаталоги).


    Таким образом, для решения задачи нужно правильно создать имена и пути для RAR. Для чего
    воспользуемся следующими исходными данными:



  • В командных файлах можно получить доступ к текущей дате и текущему времени - переменные %DATE% и %TIME%


  • В командных файлах можно создавать временные переменные с помощью команды SET.



  • Значение временных переменных может быть сформировано на основе %DATE% и %TIME% путем пропуска и (или) замещения их частей с помощью специальной конструкции с использованием символа ~и числового значения, определяющего группу символов из данных текущего значения переменной.


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


    Дата, получаемая из переменной %DATE% при стандартных настройках региональных установок Windows 2000
    выглядит следующим образом:

    Пн 21.01.2005 - День недели(2 символа)-Пробел(1 символ)-дата(10 символов) - всего 13 символов.

    В Windows XP/Vista/7 день недели отсутствует, что несколько упрощает структуру даты.
    Для создания нового каталога в командной строке используется команда


    MD имя каталога .

    Имя каталога нужно получить из текущей даты.
    Создаем в памяти временную переменную VDATE и присваиваем ей значение
    переменной окружения DATE, без первых 3-х символов (Пн и пробел) - 20.01.2005:


    set VDATE=%date:~3%


    В версиях Windows, где в значении принимаемом переменной DATE, отсутствует
    день недели (3 символа - "Пн "), значение VDATE получится не тем, что
    требуется. Чтобы не анализировать признаки наличия данного кода, можно
    воспользоваться и другим вариантом - не пропустить первые 3 символа (~3) от
    начала строки переменной DATE, а взять 10 символов от конца строки, указав число 10 со знаком "минус" - будет тот же результат - 20.01.2010

    set VDATE=%date:~-10%



    Создаем каталог на диске C:, имя которого = текущая дата из переменной VDATE:


    MD C:\%VDATE%

    После выполнения этой команды на диске C: будет создан каталог с именем 20.01.2005



    Можно обойтись без лишних операторов, связанных с формированием значения переменной VDATE, которую я использовал для упрощения понимания структуры создаваемого имени каталога:

    MD %DATE:~-10% - создать каталог, имя которого будет представлено в виде текущей даты ДД.ММ.ГГГГ


    Время, получаемое из переменной %TIME% выглядит так :

    14:30:59.93 - Часы, минуты, секунды, сотые доли секунды.

    Сотые доли - это в имени файла архива, пожалуй, лишнее. Создаем временную
    переменную VTIME и присваиваем ей текущее время без последних 3-х символов, т.е
    пропускаем 0 символов от начала и отсекаем 3 символа от конца. Количество пропущенных и отсекаемых символов разделяются запятой:

    set VTIME=%time:~0,-3%

    Теперь VTIME = 14:30:59, но знак двоеточия ( : ) в имени файла использовать нельзя, это специальный символ, использующийся в именах устройств (диск C:\). Поэтому, его придется заменить его на любой другой символ, допустимый в имени файла, например, точку. Для замены символов используется знак " = "

    set VTIME=%VTIME::=.% - заменить в переменной VTIME символ двоеточия на символ точки.

    Переменная VTIME примет значение 14.30.59





    Запустим архиватор:


    rar.exe a -r C:\%VDATE%\%VTIME%.rar "C:\Program files\far\*.*"




    Теперь можно создать командный файл с содержимым:


    set VDATE=%date:~-10%

    md c:\%VDATE%

    set VTIME=%time:~0,-3%

    set VTIME=%VTIME::=.%

    rar.exe a -r C:\%VDATE%\%VTIME%.rar "C:\Program files\far\*.*"



       
    Такой командный файл можно выполнять через автозагрузку, или как часть
    скрипта, при входе пользователя в домен, либо с помощью планировщика в
    заданное время, и у вас всегда будут в наличии упорядоченные по времени
    архивы критических данных.


    http://ab57.ru/cmd.html

  • Список команд Windows ( Windows CMD )

    $
    0
    0


    Список команд включает в себя наиболее полный перечень, представленный не только
    внутренними командами CMD, но и утилитами командной строки. В разных версиях
    операционных систем семейства Windows набор команд, их входные параметры,
    синтаксис и отображение результатов могут различаться. Одна и та же утилита
    командной строки
    может присутствовать в стандартной поставке одной версии Windows, но
    отсутствовать или входить в состав дополнительных средств,
    например, Resource Kit или Software Development Kit, для другой.
    Некоторые из приведенных команд, устарели, и не поддерживаются или не имеют
    смысла в современных операционных системах.


    Названия наиболее распространенных команд, представленных на данной странице,
    являются ссылками и ведут на страницу с подробным описанием и примерами
    использования.


    APPEND - позволяет программам открывать файлы данных из указанных
    папок так, как будто они находятся в текущей папке.

    ARP - просмотр и изменение таблиц ARP (Address Resolution Protocol)

    ASSOC - просмотр или изменение сопоставлений расширений файлов приложениям

    AT - управление планировщиком задач

    ATTRIB - изменение атрибутов файлов


    BCDBOOT - копирование в системный раздел файлов загрузки и создание
    нового хранилища конфигурации загрузки (BCD)

    BCDEDIT - редактирование хранилища данных конфигурации загрузки (BCD)

    BOOTCFG - редактирование параметров загрузки в файле boot.ini

    BOOTSECT - редактирование загрузочных
    секторов для обеспечения загрузки NTLDR или BOOTMGR

    CACLS - редактирование списков управления доступом к файлам (ACL - Access Control List)

    CALL - вызов из командного файла подпрограмм или других командных файлов

    CD - смена каталога (Change Directory)

    CHANGE - изменение настроек сервера терминалов. Контексты - LOGON, PORT, USER

    CHCP - просмотр или изменение текущей кодовой страницы

    CHGLOGON - изменение настроек сервера терминалов, аналогично CHANGE LOGON

    CHGPORT - изменение настроек сервера терминалов, аналогично CHANGE PORT

    CHGUSR - изменение настроек сервера терминалов, аналогично CHANGE USER

    CHKDSK - проверка диска (Check Disk)

    CHKNTFS - проверка признака ошибки файловой системы и управление проверкой диска при загрузке Windows

    CHOICE - реализация пользовательского ввода в командном файле

    CIPHER - отображение или изменение шифрования файлов

    CLIP - перенаправление вывода утилит командной строки в буфер обмена Windows

    CLS - очистка экрана в командной строке

    CMD - запуск новой копии интерпретатора командной строки

    COLOR - изменение цвета текста и фона в окне CMD

    COMMAND - запуск новой копии интерпретатора командной строки MS-DOS


    COMP - сравнение содержимого файлов

    COMPACT - управление сжатием и распаковкой файлов и каталогов

    CONVERT - преобразование файловой системы из FAT в NTFS


    COPY - копирование файлов и каталогов

    DATE - отображение или изменение даты

    DEBUG - запуск отладчика Windows

    DEFRAG - дефрагментация диска

    DEL - удаление одного или нескольких файлов

    DevCon - управление устройствами в командной строке

    DIR - отображение списка файлов и каталогов

    DISKPART - управление разделами дисков из командной строки

    DOSKEY - редактирование и повторный вызов команд Windows

    DRIVERQUERY - отобразить информацию об установленных драйверах.

    ECHO - вывод текста на экран консоли

    EDIT - запуск текстового редактора

    ENDLOCAL - конец локальных изменений переменных окружения в командном файле

    ERASE - аналогично команде DEL - удаление файлов

    ESENTUTL - обслуживание баз данных Extensible Storage Engine для Windows

    EVENTCREATE - запись сообщения в журнал событий Windows

    EXIT - выход из процедуры или командного файла

    EXPAND - распаковка сжатых файлов CAB-файлов.

    EXTRACT - извлечение содержимого, распаковка CAB-файлов в Windows 98/Me

    FC - сравнение содержимого файлов

    FIND - поиск строки символов в файле

    FINDSTR - поиск строк в файлах с использованием регулярных выражений

    FOR - организация циклической обработки результатов выполнения других команд, списков, и строк в текстовых файлах

    FORFILES - выполнение указанной команды для каждого файла из заданной группы

    FORMAT - форматирование диска


    FSUTIL - управление файловой системой

    FTP - консольный FTP-клиент

    FTYPE - просмотр и изменение расширений файлов и сопоставленных им приложений

    GETMAC - отображение физического адреса сетевого адаптера (MAC-адреса)

    GOTO - команда безусловного перехода в командном файле

    HELP - вызов справки командной строки Windows

    HOSTNAME - отображение имени компьютера

    iCACLS - управление списками доступа (ACL)

    IF - оператор условного выполнения команд в пакетном файле

    IPCONFIGпросмотр и управление конфигурацией протокола IP


    LABEL - редактирование меток тома дисков

    LOGMAN - управление монитором оценки производительности системы

    LOGOFF - завершение сеанса пользователя

    MAKECAB - создание сжатых файлов формата CAB

    MEM - вывод справки об использовании памяти в MS-DOS

    MD - создание нового каталога

    MKLINK - создание символической ссылки на файл или каталог

    MODE - конфигурирование системных устройств в среде CMD

    MORE - постраничный вывод в консоли

    MOUNTVOL - управление точками монтирования томов

    MOVE - перемещение файлов и каталогов

    MOVEFILE - перемещение или удаление занятых файлов при следующей перезагрузке

    MSG - отправка сообщений пользователям.

    NBTSTAT - просмотр статистических данных NETBIOS через TCP/IP

    NET - управление ресурсами локальной сети

    NETCFG - отображение конфигурации компонентов сети

    NETSH - командная сетевая оболочка (Network Shell)

    NETSTAT - отображение статистики сетевых соединений


    NSLOOKUP - просмотр данных DNS в командной строке


    OPENFILES - управление открытыми по сети или локально файлами

    PATH - отображение или изменение путей поиска исполняемых файлов

    PATHPING - трассировка маршрута с возможностью оценки качества трассы к узлу

    PAUSE - пауза при выполнении командного файла

    PINGутилита проверки доступности узла

    POPD - возврат в каталог, ранее запомненный с помощью команды PUSHD

    PNPUTIL - конфигурирование драйверов устройств PnP

    POWERCFG - настройка параметров системы электропитания Windows

    PRINT - печать текстового файла

    PROMPT - изменение строки приглашения в консоли

    PUSHD - сохранить текущий путь каталога

    QPROCESS - отобразить состояние процесса

    QUERY - опросить состояние процессов и сеансов пользователей

    QUSER - отобразить информацию о сеансах пользователей


    RASDIAL - управление сеансами удаленного доступа

    RASPHONE - управление сеансами удаленного доступа

    RD - удаление каталога

    RECOVER - восстановление файлов на поврежденном диске

    REG - утилита командной строки для работы с реестром Windows

    REGEDIT - импорт и экспорт данных реестра Windows

    REGSVR32 - регистрация или отмена регистрации DLL

    REGINI - управление доступом к разделам реестра

    REM - комментарий в строке командного файла

    REN - переименование файлов

    REPLACE - замена или добавление файлов в катологах

    RESET - сброс сеанса удаленного рабочего стола (RDP сессии)

    RMDIR - удаление каталога

    ROBOCOPY - утилита резервного копирования и синхронизации каталогов (Robust File and Folder Copy)

    ROUTE - управление таблицей маршрутизации

    RUNAS - запуск приложения от имени другого пользователя

    RUNDLL32 - запуск DLL в качестве приложения


    SC - управление службами Windows (Service Control)

    SCHTASKS - управление планировщиком задач

    SCLIST - отображение списка системных служб

    SET - отображение и изменение переменных среды окружения Windows

    SETLOCAL - установка локальных переменных в командном файле

    SETX - утилита для создания системных переменных

    SFC - проверка и восстановление системных файлов Windows

    SHARE - просмотр, создание и удаление разделяемых в локальной сети ресурсов

    SHIFTсдвиг входных параметров для командного файла

    SHUTDOWN - выключение или перезагрузка компьютера

    SLEEP - задержка по времени в пакетном файле

    SORT - сортировка строк в текстовом файле

    START - запуск приложения или командного файла

    SUBST - назначение (отмена назначения) каталогу буквы диска

    SYSTEMINFO - отображение информации о системе

    TAKEOWN - просмотр или изменение владельца файла

    TASKKILL - завершение процессов на локальной или удаленной системе.

    TASKLIST - отображение списка выполняющихся приложений и служб Windows

    TIME - отображение и установка системного времени

    TELNET - telnet-клиент Windows

    TFTP - TFTP-клиент Windows

    TIMEOUT - задержка в пакетных файлах

    TITLE - изменение заголовка окна CMD.EXE

    TRACERT - трассировка маршрута к удаленному узлу

    TREE - отображение структуры каталога в графическом виде

    TYPE - вывод на экран содержимого текстового файла

    TypePerf - вывод сведений о производительности на экран или в журнал


    TZUTIL - управление часовыми поясами в среде Windows


    VER - отображение версии операционной системы

    VERIFY - управление режимом проверки записываемых файлов

    VOL - вывод данных метки тома

    WAITFOR - организация обмена сигналами между компьютерами

    WHERE - определение места расположения файлов

    WHOAMI - вывод имени текущего пользователя

    WINDIFF - сравнение содержимого файлов

    WINRM - удаленное управление Windows из командной строки

    WINRS - удаленная командная строка (Remote Shell)

    WINSAT - средство проверки производительности Windows

    WMIC - выполнение команды WMI


    XCOPY - копирование файлов и папок

    http://ab57.ru/cmdlist.html

    Настройка командной строки Windows.

    $
    0
    0


    Приложение "Командная строка", запускаемое через стандартное меню Windows, можно сделать более удобным в использовании, немного изменив его свойства под свои предпочтения. Часть настроек можно выполнить изменением свойств ярлыка, с помощью которого выполняется запуск командной строки, а часть - редактированием реестра Windows.


    Настройка командной строки через изменение свойств ярлыка.





    1. Откройте окно Командная строка.


    2. Щелкните указателем мышки левый верхний угол окна и выберите команду Свойства.


    3. Выберите вкладку Общие.


    4. В области Запоминание командвыберите или введите значение 999в поле Размер буфера, а затем выберите или введите значение 5в поле Количество буферов. Увеличение размера буфера экрана до 999 позволяет выполнять прокрутку в окне командной строки. Увеличение количества буферов до пяти увеличивает число строк в окне командной строки до 5000.



    5. В области Правкаустановите флажки Выделение мышьюи Быстрая вставка. Флажок Выделение мышьюпозволяет копировать и вставлять данные в окне командной строки.
    Чтобы скопировать, выделите левой кнопкой мыши текст в окне командной строки и нажмите правую кнопку мыши. Чтобы выполнить вставку в командную строку или текстовый файл, щелкните правой кнопкой мыши.


    При желании, можно изменить расположение и размер окна командной строки.



    В диалоговом окне Изменение свойстввыберите вариант Сохранить свойства для других окон с тем же именем.


    Настройка командной строки изменением параметров в реестре Windows.




    Изменение внешнего вида и некоторых свойств командной строки можно выполнить не только с помощью определенных ключей при запуске cmd.exe, но и изменив параметры реестра, предназначенные для командного процессора в разделах:




    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
    - для всех пользователей.


    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\ - для текущего пользователя.


    HKEY_CURRENT_USER\Console\ - дополнительно для текущего пользователя.


    Параметры командной строки при запуске CMD.EXEимеют наивысший приоритет, а пользовательские настройки ( раздел реестра HKEY_CURRENT_USER ) имеют приоритет над настройками для компьютера ( раздел реестра HKEY_LOCAL_MACHINE ).


    Одной из наиболее полезных настроек является изменение обработки вводимой командной строки таким образом, чтобы можно было выполнять подстановку имен файлов и каталогов при нажатии специальной клавиши, как это реализовано в командной оболочке Unix-подобных операционных систем. Так например, для перехода в каталог homeне обязательно набирать команду :


    cd /home


    а достаточно ввести cd /h и нажать специальную клавишу Tab - недостающая часть имени ( ome ) будет подставлена в качестве параметра команды смены каталога. Очень полезная возможность при наборе длинных имен файлов и каталогов.


    Аналогичным образом можно настроить и командную строку Windows. Запустите редактор реестра и перейдите в раздел



    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor



    Код символа Tabравен шестнадцатеричному числу 9и его нужно задать в формате REG_DWORDдля параметров CompletionCharи PathCompletionChar ( значение 0x40 заменить на 0x9 )
    Теперь, после перезапуска приложения командной строки, оцените преимущества подстановки части имен, выполнив следующие действия:


    - перейти в корень диска C:
    CD C:\


    - для перехода, например в каталог с длинным именем Program Files наберите


    CD Proи нжмите Tab. В строке ввода должна появиться команда :


    CD "Program Files"


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


    В тех случаях, когда имеется несколько совпадающих начальных частей имен файлов или каталогов, при каждом нажатии клавиши Tabбудет подставляться следующее по алфавитному порядку имя. Для возврата на предыдущее - используется комбинация Shift+Tab


    Правка реестра позволяет также изменить внешний вид окна командной строки, например, цвет фона и цвет символов, как это выполняется с помощью команды COLORили ключа /T при запуске CMD.EXE. Расцветку определяют параметры


    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\DefaultColor -
    для всех пользователей.



    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DefaultColor -
    для текущего пользователя.



    Значения параметров из раздела пользователя имеют больший приоритет, по сравнению с параметрами раздела HKEY_LOCAL_MACHINE



    Если параметр DefaultColorимеет значение по умолчанию
    ( REG_DWORD 0x00000000 ), то цветовой набор определяется значением параметра


    HKEY_CURRENT_USER\Console\ScreenColors.


    На практике, изменение цвета фона окна и цвета символов лучше всего задавать значением параметра типа REG_DWORD:


    HKEY_CURRENT_USER\Console\ScreenColors.


    Младший байт этого параметра определяет цвета фона и текста, каждый из которых задается шестнадцатеричной цифрой. Старший бит определяет яркость, а последующие биты - цвет :


    Бит 0 - яркость

    Бит 1 - красный ( R )

    Бит 2 - зеленый ( G )

    Бит 3 - синий ( B )


    Значения битов задают комбинацию цветов, так например, для желтого цвета используется установка битов 1 и 2 ( Красный и Зеленый).
    Старшие 4 бита ( тетрада ) определяют цвет фона, младшие - цвет текста.
    Каждая цифра тетрады может иметь следующие значения:


        0 = Черный      8 = Серый
        1 = Синий       9 = Светло-синий
        2 = Зеленый     A = Светло-зеленый
        3 = Голубой     B = Светло-голубой
        4 = Красный     C = Светло-красный
        5 = Лиловый     D = Светло-лиловый
        6 = Желтый      E = Светло-желтый
        7 = Белый       F = Ярко-белый
    




    Примеры значений параметра ScreenColors:


    F0 - "консоль наоборот> - черные символы на белом фоне.


    20 - зеленый фон, черные символы.


    A0 - яркий зеленый фон, черные символы.


    9F - яркий синий фон, яркие белые символы.


    Использование истории вводимых команд.




    При работе в командной строке удобно использовать, полностью или частично, ранее введенные команды. Для вызова ранее введенных команд используются клавиши со стрелками Стрелка Вверх - на одну команду назад и Стрелка Вниз - на одну команду вперед. Кроме того, можно использовать функциональные клавиши:


    F1 - посимвольный вызов последней введенной команды. Каждое нажатие F1 приводит к последовательной подстановке в поле ввода одного символа из предыдущейкоманды.


    F2 - копирование до символа. После нажатия на F2 на экране отображается запрос символа, до которого будет скопирована предыдущая команда. Например, если предыдущая команда была ping yandex.ru, и в качестве символа задана точка, то в строку ввода команды будет занесено ping yandex, если задан пробел, то - ping.


    F3 - вызов предыдущей команды.


    F4 - удалить до символа. Выполняется удаление текста от текущей позиции курсора до заданного символа.


    F5и F8 - вызов буфера ранее введенных команд. Вывод по нажатию клавиши F5 прекращается когда будет отображена первая введенная команда текущей сессии.


    F7 - отображение ранее введенных команд в отдельном окне в виде списка. Для выполнения нужной команды нужно выбрать ее, используя клавиши со стрелками, и нажать ENTER


    F9 - выполнить команду, номер которой запрашивается. Номер команды в списке истории можно получить при использовании F7.

    http://ab57.ru/cmdtweak.html
    http://habrahabr.ru/post/164687/
    http://habrahabr.ru/post/164687/
    https://ru.wikipedia.org/wiki/MinGW
    http://mridgers.github.io/clink/
    http://www.mingw.org/wiki/MSYS
    http://intgat.tigress.co.uk/rmy/busybox/index.html
    http://blog.acmenet.ru/2014/09/26/gnu-on-windows/
    http://forum.farmanager.com/viewtopic.php?t=3153

    Установка MinGW/MSYS и настройка окружения для разработчика часть 5

    $
    0
    0

    2.14. Компиляция и установка библиотеки OpenAL


    Описание:

    Официальный сайт: http://connect.creativelabs.com/openal/

    OpenAL или Open Audio Library, это свободно распространяемая кроссплатформенная библиотека API для работы с аудиоданными. Ключевая особенность – работа со звуком в 3D пространстве и использование эффектов EAX. Библиотека разработана фирмой Loki Software и в настоящий поддерживается компанией Creative.


    Сборка:

    Внимание!

    Для компиляции необходим
    CMake

    2.14.1. Скачиваем последнюю стабильную версию исходников библиотеки OpenAL, на момент написания статьи последняя версия 1.13: openal-soft-1.13.tbz2

    2.14.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\openal-soft-1.13”.

    2.14.3. Компилируем и устанавливаем библиотеку OpenAL:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/openal-soft-1.13
    cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw"-DCMAKE_C_FLAGS:STRING="-march=i686"-G "MSYS Makefiles"
    make
    make install

    2.14.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:


    Install the project...--Install configuration:"RelWithDebInfo"--Installing: C:/Qt/MinGW/lib/libOpenAL32.dll.a
    --Installing: C:/Qt/MinGW/bin/OpenAL32.dll
    --Installing: C:/Qt/MinGW/include/AL/al.h
    --Installing: C:/Qt/MinGW/include/AL/alc.h
    --Installing: C:/Qt/MinGW/include/AL/alext.h
    --Installing: C:/Qt/MinGW/include/AL/efx.h
    --Installing: C:/Qt/MinGW/include/AL/efx-creative.h
    --Installing: C:/Qt/MinGW/lib/pkgconfig/openal.pc
    --Installing: C:/Qt/MinGW/bin/openal-info.exe

    << Перейти к содержанию


    2.15. Компиляция и установка библиотеки ALUT (freealut)


    Описание:

    Официальный сайт: http://connect.creativelabs.com/openal/

    Freealut это свободная реализация стандарта OpenAL’s ALUT.


    Сборка:

    Внимание!

    Для компиляции необходим
    CMake

    Зависимости:

    Библиотека OpenAL

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.15.1. Скачиваем последнюю стабильную версию исходников библиотеки ALUT (freealut), на момент написания статьи последняя версия 1.1.0: freealut-1.1.0.tar.gz

    2.15.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\freealut-1.1.0″.

    2.15.3. Компилируем и устанавливаем библиотеку ALUT (freealut):

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/freealut-1.1.0
    cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw"-G "MSYS Makefiles"
    make
    make install

    2.15.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:


    Install the project...--Install configuration:""--Installing: C:/Qt/MinGW/include/AL/alut.h
    --Installing: C:/Qt/MinGW/lib/pkgconfig/freealut.pc
    --Installing: C:/Qt/MinGW/bin/freealut-config
    --Installing: C:/Qt/MinGW/lib/libalut.dll.a
    --Installing: C:/Qt/MinGW/bin/libalut.dll

    2.15.5. Компиляция и запуск демо-кода.

    2.15.5.1. Создаем файл “alutdemo.c” в папке “C:\Qt\build\Audio”, вставляем в него такое содержимое:


    #include<stdlib.h>#include<AL/alut.h>int main (int argc,char**argv){ALuint helloBuffer, helloSource;
      alutInit (&argc, argv);
      helloBuffer = alutCreateBufferHelloWorld();
      alGenSources(1,&helloSource);
      alSourcei(helloSource, AL_BUFFER, helloBuffer);
      alSourcePlay(helloSource);
      alutSleep(2);
      alutExit();return EXIT_SUCCESS;}

    и сохраняем.

    2.15.5.2. Для компиляции кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio
    gcc alutdemo.c -o alutdemo -lopenal32 -lalut
    ./alutdemo.exe

    Данные команды скомпилируют код в исполнительный файл “alutdemo.exe”, при запуске которого вы услышите фразу “Hello, World!”.


    << Перейти к содержанию


    2.16. Компиляция и установка cURL (libcurl) библиотеки


    Описание:

    Официальный сайт: http://curl.haxx.se/

    Библиотека Libcurl — представляет собой реализацию интерфейса API для различных передач, которую программисты могут встроить в свои программы. cURL действует как автономная обёртка для библиотеки libcurl.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib (Опционально. Сборка возможна и без нее.)

    Библиотека OpenSSL (Опционально. Нужна для сборки библиотеки cURL для git‘a)

    CMake (Опционально. Нужен для сборки библиотеки cURL для git‘a)

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.16.1. Скачиваем последнюю стабильную версию исходников библиотеки cURL (libcurl), на момент написания статьи последняя версия 7.28.1: curl-7.28.1.tar.gz

    2.16.2. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\curl-7.28.1” .

    2.16.3. Компилируем и устанавливаем библиотеку cURL:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/curl-7.28.1./configure --prefix=/mingw
    make
    make install

    Если при конфигурации возникла ошибка:


    checking run-time libs availability... failed
    configure: error: one or more libs available at link-time are not available run-time.Libs used at link-time:-lwldap32 -lws2_32  -lz

    Попробуйте отключить антивирус. Антивирусу “Avira Free Antivir” не понравился один из тестовых исполнительных файлов, создаваемых во время конфигурации.

    Итак, библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.16.4. Cборка библиотеки cURL для git‘a с помощью CMake. Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/curl-7.28.1
    cp /mingw/lib/libwsock32.a /c/Qt/build/curl-7.28.1/lib/wsock32.lib
    cp /mingw/lib/libwldap32.a /c/Qt/build/curl-7.28.1/lib/wldap32.lib
    cp /mingw/lib/libws2_32.a /c/Qt/build/curl-7.28.1/lib/ws2_32.lib
    cp /mingw/lib/libwsock32.a /c/Qt/build/curl-7.28.1/src/wsock32.lib
    cp /mingw/lib/libwldap32.a /c/Qt/build/curl-7.28.1/src/wldap32.lib
    cp /mingw/lib/libws2_32.a /c/Qt/build/curl-7.28.1/src/ws2_32.lib
    cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw"-G "MSYS Makefiles"
    make 
    make install
    mv /mingw/lib/libcurl.dll /mingw/bin/libcurl.dll
    mv /mingw/lib/libcurl_imp.lib /mingw/lib/libcurl.a

    2.16.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:

    Утилита “curl.exe”, динамическая библиотека “libcurl-4.dll” или “libcurl.dll”, если использовался CMakeв “C:\Qt\MinGW\bin”

    Статическая “libcurl.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\curl”


    << Перейти к содержанию


    2.17. Компиляция и установка библиотеки libmodplug


    Описание:

    Официальный сайт: http://modplug-xmms.sourceforge.net/

    Библиотека libmodplug предназначена для работы с трекерной музыкой. Является аналогом библиотеки MikMod.


    Сборка:

    2.17.1. Скачиваем последнюю стабильную версию исходников библиотеки libmodplug, на момент написания статьи последняя версия 0.8.8.4: libmodplug-0.8.8.4.tar.gz

    2.17.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\libmodplug-0.8.8.4”.

    2.17.3. Компилируем и устанавливаем библиотеку libmodplug:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/libmodplug-0.8.8.4./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.17.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libmodplug-1.dll” в “C:\Qt\MinGW\bin”

    Статическая “libmodplug.dll.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\libmodplug”


    << Перейти к содержанию


    2.18. Компиляция и установка библиотеки и утилит OpenSSL


    Описание:

    Официальный сайт: http://www.openssl.org/

    OpenSSL — криптографический пакет (утилиты + библиотеки) с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать различные ключи типа RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Кроме того имеется возможность шифрования данных и тестирования SSL/TLS соединений.


    Сборка:

    2.18.1. Скачиваем последнюю стабильную версию исходников библиотеки OpenSSL, на момент написания статьи последняя версия 1.0.1c: openssl-1.0.1c.tar.gz

    2.18.2. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\openssl-1.0.1c”.

    2.18.3. Компилируем и устанавливаем библиотеку OpenSSL:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/openssl-1.0.1c./Configure mingw --prefix=/mingw
    make
    make install

    Компилирование OpenSSL и его установка, достаточно долговременный процесс.

    2.18.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:

    Утилита “openssl.exe” в “C:\Qt\MinGW\bin”

    Статические “libssl.a” и “libcrypto.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\openssl”


    << Перейти к содержанию


    2.19. Компиляция и установка библиотеки Expat


    Описание:

    Официальный сайт: http://expat.sourceforge.net/

    Expat — это свободная потокоориентированная библиотека парсинга для XML. Один из наиболее доступных XML парсеров, достаточно широко используется в открытом программном обеспечении.


    Сборка:

    2.19.1. Скачиваем последнюю стабильную версию исходников библиотеки Expat, на момент написания статьи последняя версия 2.1.0: expat-2.1.0.tar.gz

    2.19.2. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\expat-2.1.0″.

    2.19.3. Компилируем и устанавливаем библиотеку Expat:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/expat-2.1.0./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.19.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libexpat-1.dll” в “C:\Qt\MinGW\bin”

    Статическая “libexpat.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include”


    << Перейти к содержанию


    2.20. Компиляция и установка библиотеки ZZIPlib


    Описание:

    Официальный сайт: http://zziplib.sourceforge.net/

    ZZIPlib — это легковесная библиотека для работы со сжатыми файлами и ZIP-архивами.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib

    Python 2.7.x (для сборки документации)

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.20.1. Устанавливаем Python в папку “C:\Qt\Python272”.

    2.20.2. Скачиваем последнюю стабильную версию исходников библиотеки ZZIPlib, на момент написания статьи последняя версия 0.13.62: zziplib-0.13.62.tar.bz2

    2.20.3. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\zziplib-0.13.62”.

    2.20.4. Открываем файл “C:\Qt\build\zziplib-0.13.62\configure”, находим в файле строки:


    uname -msr

    и заменяем на:


    uname -ms

    всего две таких строки.


    2.20.5. Компилируем и устанавливаем библиотеку ZZIPlib:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    export PYTHON="/c/Qt/Python27/python"
    cd /c/Qt/build/zziplib-0.13.62./configure --disable-mmap --prefix=/mingw
    make
    make install
    export-n PYTHON

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.20.6. Скомпилированные статические библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Статические “libzzip*.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\zzip”


    << Перейти к содержанию


    3. Интеграция MinGW с IDE


    Разрабатывать приложения, пользуясь консольной оболочкой, не всем привычно, да и идти нужно в ногу со временем. Поэтому вместе с нашим собранным тулчейном я рекомендую использовать среду разработки QtCreatorот Digia.

    Среда также позволит вам разрабатывать оконные приложения, используя мощнейший фреймворк Qt. Цена вопроса – 300-400 МБ для загрузки сборки под MinGW. Зато удобств – максимум. В QtCreator есть и автодополнение кода и настраиваемая подсветка, есть даже режим эмуляции vim, если вы уж так к нему привыкли.

    Внешний вид QtCreator (изображение кликабельно):


    Внешний вид QtCreator


    Установка предельно проста:

    1. Нужно загрузить сборку библиотек Qt для MinGW (на момент написания статьи их последняя версия 4.8.4): [DOWNLOAD | СКАЧАТЬ].

    2. Установить библиотеки в “C:\Qt\qt-4.8.4”, установщик спросит путь к компилятору, следует указать “C:\Qt\MinGW”, если установщик ругнется на хэдер, ничего страшного, можно продолжить.

    3. Загрузить собственно сам QtCreator (на момент написания статьи его последняя версия 2.6.1): [DOWNLOAD | СКАЧАТЬ].

    4. Установить QtCreator в “C:\Qt\qtcreator-2.6.1” .

    5. Среда готова к написанию программ! Кстати, кроме удобного qmake, имеется встроенная поддержка CMake, конечно при условии, что мы этот cmake установили.

    Если у вас возникли проблемы по установке, настоятельно рекомендую посетить замечательный сайт http://qtlinux.narod.ru, там вы найдете различные мануалы по установке и тонкой настройки этой IDE.


    << Перейти к содержанию



    http://exlmoto.ru/mingw-development-environment/

    Установка MinGW/MSYS и настройка окружения для разработчика часть 4

    $
    0
    0

    2.3.7. Компиляция и установка библиотеки SDL_sound


    Описание:

    Официальный сайт: http://icculus.org/SDL_sound/

    SDL_sound это неофициальная библиотека, расширяющая возможности SDL и позволяющая использовать функции декодирования и воспроизведения таких популярных форматов звуковых файлов, как “*.mp3”, “*.wav” и некоторых других. Она предназначена для упрощения написания приложений. Является аналогом библиотеки SDL_mixer.


    Сборка:

    Внимание! Зависимости:

    Библиотека OGG

    Библиотека OggVorbis (libVorbis)

    Библиотека FLAC

    Библиотека libmodplug

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.3.7.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_sound, на момент написания статьи последняя версия 1.0.3: SDL_sound-1.0.3.tar.gz

    2.3.7.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_sound-1.0.3”.

    2.3.7.3. Открываем файл “C:\Qt\build\SDL\SDL_sound-1.0.3\decoders\mpglib\mpg123_sdlsound.h” и заменяем строку #8:


    #include<math.h>

    таким содержимым:


    # define M_PI       3.14159265358979323846# define M_SQRT2    1.41421356237309504880# define REAL_IS_FLOAT# define NEW_DCT9# define random rand# define srandom srand

    затем сохраняем файл.

    2.3.7.4. Открываем файл “C:\Qt\build\SDL\SDL_sound-1.0.3\decoders\timidity\tables.h” и комментируем строку #23:


    //#include <math.h>

    затем сохраняем файл.

    2.3.7.5. Компилируем и устанавливаем библиотеку SDL_sound:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_sound-1.0.3./configure --prefix=/mingw
    make
    make install

    Если у вас в процессе конфигурирования не подцепляется FLAC, попробуйте сначала ввести строчку:


    export LIBS="-L/mingw/lib -logg -lws2_32"

    А потом уже выполнять конфигурирование. Без этой строки “conftest.c” может не слинковаться. После компиляции не забудьте выполнить:


    export-n LIBS

    Чтобы очистить переменную окружения LIBS. Библиотека скомпилировалась со стандартными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.7.6. Скомпилированная статическая библиотека и утилиты, заголовочные файлы должны скопироваться в соответствующие папки:

    Утилиты “playsound_simple.exe” и “playsound.exe” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_sound.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдер “SDL_sound.h” в “C:\Qt\MinGW\include\SDL”

    2.3.7.7. На этом установка завершена. Для проверки правильности работы библиотеки перенесите любой файл, содержащий музыку или звук в формате “*.mp3”, “*.flac”, “*.ogg”, “*.wav” или “*.mod” на исполнительный бинарник “playsound.exe”, который расположен по адресу “C:\Qt\MinGW\bin”, и он должен воспроизвестись.


    << Перейти к содержанию


    2.3.8. Компиляция и установка библиотеки SDL_draw


    Описание:

    Официальный сайт: http://sdl-draw.sourceforge.net/

    Небольшая неофициальная библиотека для рисования различных графических примитивов.


    Сборка:

    2.3.8.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_draw, на момент написания статьи последняя версия 1.2.13: SDL_draw-1.2.13.tar.gz

    2.3.8.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_draw-1.2.13”.

    2.3.8.3. Компилируем и устанавливаем библиотеку SDL_draw:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_draw-1.2.13./configure --prefix=/mingw
    make
    make install
    cp /c/Qt/build/SDL/SDL_draw-1.2.13/include/SDL_draw.h /c/Qt/MinGW/include/SDL/SDL_draw.h

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.8.4. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:

    Статическая “libSDL_draw.a” в “C:\Qt\MinGW\lib”

    Хэдер “SDL_draw.h” в “C:\Qt\MinGW\include\SDL”


    << Перейти к содержанию


    2.3.9. Компиляция и установка библиотеки SDL_console


    Описание:

    Официальный сайт: http://wacha.ch/wiki/sdlconsole

    SDL_Console реализует выпадающую консоль, как в Quake, которая может быть легко добавлена в любое SDL-приложение. С помощью выполнения предопределенных команд в консоли вы можете легко управлять своим приложением. Добавить можно несколько консолей одновременно.


    Сборка:

    Внимание! Зависимости:

    Библиотека SDL_image

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.3.9.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_console, на момент написания статьи последняя версия 2.1: sdlconsole-2.1.tar.gz

    2.3.9.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\sdlconsole-2.1” .

    2.3.9.3. Компилируем и устанавливаем библиотеку SDL_console:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/sdlconsole-2.1./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.9.4. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:

    Статическая “libSDL_console.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\SDL_console”


    << Перейти к содержанию


    2.4. Компиляция и установка zlib библиотеки


    Описание:

    Официальный сайт: http://zlib.net/

    zlib это свободная кроссплатформенная библиотека для сжатия данных. Используется в огромном количестве приложений и библиотек.


    Сборка:

    2.4.1. Скачиваем последнюю стабильную версию исходников библиотеки zlib, на момент написания статьи последняя версия 1.2.7: zlib-1.2.7.tar.gz

    2.4.2. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки должны быть в папке “C:\Qt\build\zlib-1.2.7”.

    2.4.3. Если вам необходима динамическая библиотека “zlib1.dll”, то открываем файл “C:\Qt\build\zlib-1.2.7\win32\Makefile.gcc” и правим строку #32 следующим образом:


    SHARED_MODE=1

    Просто меняем “0” на “1” .

    2.4.4. Компилируем и устанавливаем zlib-библиотеку:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    export DESTDIR=/mingw && export BINARY_PATH=/bin &&export INCLUDE_PATH=/include && export LIBRARY_PATH=/lib
    cd /c/Qt/build/zlib-1.2.7
    make -f win32/Makefile.gcc
    make install -f win32/Makefile.gcc
    export-n DESTDIR BINARY_PATH INCLUDE_PATH LIBRARY_PATH

    2.4.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “zlib1.dll” в “C:\Qt\MinGW\bin”

    Статические “libz.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include”


    << Перейти к содержанию


    2.5. Компиляция и установка JPEG библиотеки


    Описание:

    Официальный сайт: http://www.ijg.org/

    Функции из библиотеки libjpeg используются различными программами и другими библиотеками для работы с форматами изображений “*.jpg”, “*.jpeg” и другими. Библиотека создана сообществом “Independent JPEG Group”.


    Сборка:

    2.5.1. Скачиваем последнюю стабильную версию исходников библиотеки libjpeg, на момент написания статьи последняя это v9: jpegsrc.v9.tar.gz

    2.5.2. Распаковываем скачанный архив в папку “C:\Qt\build\Image”, исходники библиотеки должны быть в папке “C:\Qt\build\Image\jpeg-9”.

    2.5.3. Компилируем и устанавливаем JPEG-библиотеку:

    Примечание:если вы собираете библиотеку jpeg, ранней 9-ой версии (jpeg-9 alpha), то для корректной сборки следует выполнить команду:


    autoheader

    перед конфигурированием, иначе будет возникать конфликт типов при компиляции (error: conflicting types for ‘jpeg_suppress_tables’).

    Сейчас разработчики исправили этот недочет, поэтому команду “autoheader” можно не использовать.


    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Image/jpeg-9./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libjpeg-9.dll” и бинарные программы в “C:\Qt\MinGW\bin”

    Статические “libjpeg.a” и “libjpeg.dll.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include”


    << Перейти к содержанию


    2.6. Компиляция и установка PNG библиотеки


    Описание:

    Официальный сайт: http://www.libpng.org/pub/png/libpng.html

    Библиотека libpng – это официальная библиотека для работы с растровой графикой в формате “*.png”. Библиотека является платформо-независимой и состоит из множества функций.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.6.1. Скачиваем последнюю стабильную версию исходников библиотеки libpng, на момент написания статьи последняя версия 1.6.3: libpng-1.6.3.tar.gz

    2.6.2. Распаковываем скачанный архив в папку “C:\Qt\build\Image”, исходники библиотеки должны быть в папке “C:\Qt\build\Image\libpng-1.6.3”.

    2.6.3. Компилируем и устанавливаем PNG-библиотеку:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Image/libpng-1.6.3./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.6.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Бинарные программы в “C:\Qt\MinGW\bin”

    Статические “libpng.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include”

    2.6.5. На этом установка завершена. При желании можно скомпилировать утилиту “pngtest.exe”:


    cd /c/Qt/build/Image/libpng-1.6.3
    gcc pngtest.c -o pngtest -lpng
    ./pngtest

    Её запуск выдаст в консоль результаты тестирования файла “pngtest.png”, находящегося в папке “libpng-1.6.3”.


    << Перейти к содержанию


    2.7. Компиляция и установка TIFF библиотек


    Описание:

    Официальный сайт: http://www.remotesensing.org/libtiff/

    LibTIFF — представляет собой набор библиотек и утилит для просмотра и редактирования изображений формата “.tiff” или “*.tif”. Создана компьютерной компанией Silicon Graphics.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib

    Библиотека JPEG

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.7.1. Скачиваем последнюю стабильную версию исходников библиотеки libtiff, на момент написания статьи последняя версия 4.0.3: tiff-4.0.3.tar.gz

    2.7.2. Распаковываем скачанный архив в папку “C:\Qt\build\Image”, исходники библиотеки должны быть в папке “C:\Qt\build\Image\tiff-4.0.3”.

    2.7.3. Компилируем и устанавливаем TIFF-библиотеки:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Image/tiff-4.0.3./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.7.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамические библиотеки “libtiff-5.dll”, “libtiffxx-5.dll” и бинарные программы в “C:\Qt\MinGW\bin”

    Статические “libtiff.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include”


    << Перейти к содержанию


    2.8. Компиляция и установка библиотеки FreeType 2


    Описание:

    Официальный сайт: http://www.freetype.org/

    FreeType 2 — библиотека для растеризации шрифтов и операций над ними. Библиотека значительно упрощает операции обработки текста и используется во многих *nix-подобных системах.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.8.1. Скачиваем последнюю стабильную версию исходников библиотеки FreeType 2, на момент написания статьи последняя версия 2.5.0.1: freetype-2.5.0.1.tar.gz

    2.8.2. Распаковываем скачанный архив в папку “C:\Qt\build”, исходники библиотеки должны быть в папке “C:\Qt\build\freetype-2.5.0.1” .

    2.8.3. Компилируем и устанавливаем библиотеку FreeType 2:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/freetype-2.5.0.1./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.8.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libfreetype-6.dll” в “C:\Qt\MinGW\bin”

    Статическая “libfreetype.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\freetype2\freetype”


    << Перейти к содержанию


    2.9. Компиляция и установка OGG библиотеки


    Описание:

    Официальный сайт: http://xiph.org/ogg/

    OGG это мультимедийный формат, представляющий собой контейнер для родных (нативных) файлов и формат потока для различных мультимедийных кодеков. Формат OGG является потокоориентированным.


    Сборка:

    2.9.1. Скачиваем последнюю стабильную версию исходников библиотеки OGG, на момент написания статьи последняя версия 1.3.1: libogg-1.3.1.tar.gz

    2.9.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\libogg-1.3.1” .

    2.9.3. Компилируем и устанавливаем библиотеку OGG:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/libogg-1.3.1./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.9.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libogg-0.dll” в “C:\Qt\MinGW\bin”

    Статическая “libogg.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\ogg”


    << Перейти к содержанию


    2.10. Компиляция и установка OggVorbis (libVorbis) библиотеки


    Описание:

    Официальный сайт: http://www.vorbis.com

    OggVorbis это новый формат сжатия звука. Он примерно сопоставим с другими популярными форматами, используемыми для хранения и воспроизведения цифровой музыки, такими как MP3, VQF, AAC и другими. OggVorbis отличается от других форматов тем, что он полностью бесплатный, открытый и спецификации кодека Vorbis относятся к общественному достоянию.


    Сборка:

    Внимание! Зависимости:

    Библиотека OGG

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.10.1. Скачиваем последнюю стабильную версию исходников библиотеки OggVorbis (libVorbis), на момент написания статьи последняя версия 1.3.3: libvorbis-1.3.3.tar.gz

    2.10.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\libvorbis-1.3.3”.

    2.10.3. Компилируем и устанавливаем библиотеку OggVorbis (libVorbis):

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/libvorbis-1.3.3./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.10.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамические библиотеки “libvorbis-0.dll”, “libvorbisfile-3.dll” и “libvorbisenc-2.dll” в “C:\Qt\MinGW\bin”

    Статические “libvorbis.a”, “libvorbisenc.a”, “libvorbisfile.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\vorbis”


    << Перейти к содержанию


    2.11. Компиляция и установка библиотеки FLAC


    Описание:

    Официальный сайт: http://xiph.org/flac/

    FLAC расшифровывается как Free Lossless Audio Codec, этот аудиоформат аналогичен формату MP3, но сжатие в нем происходит без потерь качества. Он работает подобно ZIP, но с FLAC вы получите гораздо лучшее сжатие, поскольку разработан он был специально для звука. Из аналогичных кодеков FLAC выделяется тем, что он не только самый быстрый, но еще и не являеющийся чей-либо собственностью, а следовательно не обременёный патентами. Кроме того, FLAC имеет открытые исходники эталонной реализации, хорошо документированный формат и API.


    Сборка:

    Внимание! Зависимости:

    Библиотека OGG

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.11.1. Скачиваем последнюю стабильную версию исходников библиотеки FLAC, на момент написания статьи последняя версия 1.2.1: flac-1.2.1.tar.gz

    2.11.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\flac-1.2.1” .

    2.11.3. Открываем файл “C:\Qt\build\Audio\flac-1.2.1\include\share\alloc.h”, и заменяем строку #38 (# ifdef _MSC_VER) такой строкой:


    #  if defined _MSC_VER || defined __MINGW32__

    после добавления сохраняем файл.

    2.11.4. Открываем файл “C:\Qt\build\Audio\flac-1.2.1\examples\cpp\encode\file\main.cpp”, добавляем после строки #32 (#include <stdlib.h>) такую строку (добавляем хэдер):


    #include<string.h>

    после добавления сохраняем файл.

    2.11.5. Компилируем и устанавливаем библиотеку FLAC:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/flac-1.2.1./configure --disable-xmms-plugin --prefix=/mingw
    make
    make install

    Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.11.6. Скомпилированные статическая библиотека, бинарные утилиты и заголовочные файлы должны скопироваться в соответствующие папки:

    Исполнительные бинарники “flac.exe” и “metaflac.exe” в “C:\Qt\MinGW\bin”

    Статические библиотеки “libFLAC.a” и “libFLAC++.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\FLAC” и в “C:\Qt\MinGW\include\FLAC++”


    << Перейти к содержанию


    2.12. Компиляция и установка библиотеки MikMod


    Описание:

    Официальный сайт: http://mikmod.shlomifish.org/

    Библиотека MikMod предназначена для работы с трекерной музыкой. Написанные специально для MS-DOS, плеер и библиотека, впоследствии были портированы на другие платформы, такие как Unix, Macintosh, BeOS и Java.


    Сборка:

    2.12.1. Скачиваем последнюю стабильную версию исходников библиотеки MikMod, на момент написания статьи последняя версия 3.2.0: libmikmod-3.2.0.tar.gz

    2.12.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\libmikmod-3.2.0″.

    2.12.3. Открываем файл “C:\Qt\build\Audio\libmikmod-3.2.0\drivers\drv_pipe.c”, добавляем после строки #33 такую строку:


    #undef unix

    после добавления сохраняем файл.

    2.12.4. Открываем файл “C:\Qt\build\Audio\libmikmod-3.2.0\playercode\mdriver.c”, добавляем после строки #27 такую строку:


    #undef unix

    после добавления сохраняем файл.

    2.12.5. Компилируем и устанавливаем библиотеку MikMod:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    export CFLAGS="-march=native"
    cd /c/Qt/build/Audio/libmikmod-3.2.0./configure --disable-threads --prefix=/mingw
    make
    make install
    export-n CFLAGS

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.12.6. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:

    Конфигурационный “libmikmod-config” в “C:\Qt\MinGW\bin”

    Статическая библиотека “libmikmod.a” в “C:\Qt\MinGW\lib”

    Хэдер “mikmod.h” в “C:\Qt\MinGW\include”


    << Перейти к содержанию


    2.13. Компиляция и установка библиотеки MAD (libmad)


    Описание:

    Официальный сайт: http://www.underbit.com/products/mad

    MAD (libmad) это высококачественный MPEG-audio декодер. В настоящее время он поддерживает MPEG-1 и MPEG-2, а также формат MPEG 2.5. Все три аудио слоя – Layer I, Layer II и Layer III (MP3) – декодер поддерживает в полном объеме.

    MAD пока не работает с многоканальным MPEG-2 звуком (хотя он должен быть совместим с потоком) и не поддерживает AAC.


    Сборка:

    2.13.1. Скачиваем последнюю стабильную версию исходников библиотеки MAD (libmad), на момент написания статьи последняя версия 0.15.1b: libmad-0.15.1b.tar.gz

    2.13.2. Распаковываем скачанный архив в папку “C:\Qt\build\Audio”, исходники библиотеки и утилит должны быть в папке “C:\Qt\build\Audio\libmad-0.15.1b”.

    2.13.3. Открываем файл “C:\Qt\build\Audio\libmad-0.15.1b\configure” обычным текстовым редактором (я советую использовать Notepad++) и находим строку #19102:


    optimize="$optimize -fforce-mem"

    и удаляем ее вместе с переносами. То есть чтобы строкой #19102 стала строка:


    optimize="$optimize -fforce-addr"

    После модификации сохраняем файл.

    2.13.4. Компилируем и устанавливаем библиотеку MAD (libmad):

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/Audio/libmad-0.15.1b./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.13.5. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:

    Статическая библиотека “libmad.a” в “C:\Qt\MinGW\lib”

    Хэдер “mad.h” в “C:\Qt\MinGW\include”


    << Перейти к содержанию



    http://exlmoto.ru/mingw-development-environment/


    Установка MinGW/MSYS и настройка окружения для разработчика часть 3

    $
    0
    0

    2.3. Компиляция и установка библиотек SDL-окружения


    По своей структуре библиотека SDL не является полноценным SDK (Software Development Kit) для разработчиков игр, так как не включает в себя высокоуровневые функции для работы с графикой, звуком и внешними устройствами. Но благодаря тому, что она предоставляет прямой доступ к графической системе, звуковой карте, устройствам ввода (клавиатуре, мыши, джойстику), CD-ROM’ому, таймеру и в ней реализованы некоторые низкоуровневые функции для работы с графикой и звуком, библиотеку вполне можно использовать для разработки не слишком сложных приложений или портирования существующих, где SDL библиотека будет использоваться как блиттер. В библиотеке реализован только минимум необходимых функций, она не раздута на десятки мегабайт и достаточно быстра. По своей сути SDL является каркасом для других библиотек, которые поддерживают более сложные функции в какой-то одной области (графика, микширование звука, поддержка различных форматов файлов, GUI и. т. д). И уже вместе с этими дополнительными библиотеками SDL и образует достаточно многофункциональный, хоть и уже устаревший, SDK для разработчиков игр.

    В этом разделе я рассмотрю сборку частоиспользуемых библиотек SDL. Некоторые из них поддерживаются официально, некоторые поддерживаются сторонними разработчиками. Собраное SDL-окружение для MinGW позволит вам легко перенести множество игр на платформу Windows.

    << Перейти к содержанию


    2.3.1. Компиляция и установка основной библиотеки SDL


    Описание:

    Официальный сайт: http://www.libsdl.org/

    Библиотека Simple DirectMedia Layer (SDL) реализует единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Она активно используется при написании мультимедийных программ: игр, эмуляторов или плееров, и является этаким подобием “DirectX” для огромного количества платформ. Более подробно про эту библиотеку можно прочитать здесь: Низкоуровневое расширение библиотеки SDL.


    Сборка:

    2.3.1.1. Скачиваем последнюю версию исходников библиотеки SDL с официального сайта, на момент написания статьи это 1.2.15: SDL-1.2.15.tar.gz

    2.3.1.2. Распаковываем архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL-1.2.15”.

    2.3.1.3. Компилируем и устанавливаем SDL-библиотеку:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL-1.2.15./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    Например, опция “–enable-stdio-redirect=no” отключает файлы “stdout.txt” и “stderr.txt”, которые создаются при запуске программы, и направляет вывод в консольное окно.

    2.3.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая “SDL.dll” в “C:\Qt\MinGW\bin”

    Статические “libSDL.a”, “libSDL.dll.a” и “libSDLmain.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\SDL”

    2.3.1.5. Запуск и компиляция небольшого демо-кода:

    Создаем файл “sdldemo.c” в папке “C:\Qt\build\SDL” с таким содержимым:


    #include<SDL/SDL.h>#include<SDL/SDL_opengl.h>void display(){
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0f,0.5f,0.0f);
        glBegin(GL_TRIANGLES);
        glVertex2f(-1.0,-1.0);
        glVertex2f(0,1.0);
        glVertex2f(1.0,-1.0);
        glEnd();
        glFlush();
        SDL_GL_SwapBuffers();}void SDL_Loop(){Uint8*keys;intdone=0;while(!done){
            SDL_Event event;
            display();while(SDL_PollEvent(&event)){switch(event.type){case SDL_QUIT:done=1;break;}}
            keys = SDL_GetKeyState(NULL);if(keys[SDLK_ESCAPE])done=1;}}int main(int argc,char*argv[]){
        SDL_Surface *screen;
        SDL_Init(SDL_INIT_VIDEO);
        screen = SDL_SetVideoMode(200,200,16, SDL_OPENGL);
        SDL_Loop();
        SDL_Quit();return0;}

    и сохраняем.

    Для компиляции и запуска кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL
    gcc -mwindows sdldemo.c -o sdldemo -lmingw32 -lSDLmain -lSDL -lopengl32
    ./sdldemo.exe

    Приложение “sdldemo.exe” создаст простое и небольшое окно с оранжевым треугольником в центре:


    Работа библиотеки SDL, скомпилированной MinGW&quot;ом


    << Перейти к содержанию


    2.3.2. Компиляция и установка библиотеки SDL_image


    Описание:

    Официальный сайт: http://www.libsdl.org/projects/SDL_image/

    Библиотека SDL_image является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях различные форматы изображений, не ограничиваясь форматом “*.bmp”. SDL_image позволяет программистам легко использовать несколько форматов без необходимости написания функций загрузки и преобразования.


    Сборка:

    Внимание! Зависимости:

    Библиотека zlib

    Библиотека JPEG

    Библиотека PNG

    Библиотека TIFF (Опционально. Я не использовал, так как ничтожно малое количество проектов использует формат изображений “*.tiff”).

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.3.2.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_image, на момент написания статьи последняя версия 1.2.12: SDL_image-1.2.12.tar.gz

    2.3.2.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_image-1.2.12”.

    2.3.2.3. Компилируем и устанавливаем библиотеку SDL_image:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_image-1.2.12./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.2.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “SDL_image.dll” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_image.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\SDL”

    2.3.2.5. На этом установка завершена. При желании можно скомпилировать утилиту “showimage.exe”:


    cd /c/Qt/build/SDL/SDL_image-1.2.12
    gcc showimage.c -o showimage -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_image -mwindows

    Если на “showimage.exe” перетащить любое изображение – оно откроется в окне.


    << Перейти к содержанию


    2.3.3. Компиляция и установка библиотеки SDL_net


    Описание:

    Официальный сайт: http://www.libsdl.org/projects/SDL_net/

    Сетевая библиотека SDL_net является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях сеть. SDL_net позволяет программистам легко обработавать сетевые соединения и передачу данных. Код, написанный с использованием функций из этой библиотеки, будет кроссплатформенным.


    Сборка:

    2.3.3.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_net, на момент написания статьи последняя версия 1.2.8: SDL_net-1.2.8.tar.gz

    2.3.3.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_net-1.2.8”.

    2.3.3.3. Компилируем и устанавливаем библиотеку SDL_net:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_net-1.2.8./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.3.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “SDL_net.dll” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_net.a” в “C:\Qt\MinGW\lib”

    Хэдер “SDL_net.h” в “C:\Qt\MinGW\include\SDL”


    << Перейти к содержанию


    2.3.4. Компиляция и установка библиотеки SDL_gfx


    Описание:

    Официальный сайт: http://www.ferzkopp.net/joomla/content/view/19/14/

    Библиотека SDL_gfx содержит в себе функции рисования примитивов и работы над изображениями-спрайтами (масштабирование, повороты, фильтры и т.д). Она развились из проекта SDL_gfxPrimitives, который представлял основные процедуры рисования примитивов, таких как: линии, окружности и многоугольники. Библиотека не относится к официальным, но большое количество проектов ее используют.


    Сборка:

    2.3.4.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_gfx, на момент написания статьи последняя версия 2.0.24: SDL_gfx-2.0.24.tar.gz

    2.3.4.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_gfx-2.0.24”.

    2.3.4.3. Компилируем и устанавливаем библиотеку SDL_gfx:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_gfx-2.0.24./configure --prefix=/mingw
    make
    make install

    Если при компиляции возникла ошибка:


    libtool:Version mismatch error.Thisis libtool 2.4.2, but the
    libtool: definition of this LT_INIT comes from libtool 2.4.
    libtool:You should recreate aclocal.m4 with macros from libtool 2.4.2
    libtool:and run autoconf again.
    make:***[SDL_gfxPrimitives.lo]Error63

    Выполните команду:


    autoreconf -fvi

    И повторите конфигурирование, а затем компиляцию.


    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.4.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “libSDL_gfx-14.dll” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_gfx.a” и “libSDL_gfx.dll.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\SDL”

    2.3.4.5. На этом установка завершена. При желании можно скомпилировать утилиту “TestGfxTexture.exe”:


    cd /c/Qt/build/SDL/SDL_gfx-2.0.24/Test
    gcc TestGfxTexture.c -o TestGfxTexture-I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_gfx -mwindows
    ./TestGfxTexture

    При запуске откроется окно, показывающее результат текстурирования.


    << Перейти к содержанию


    2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0


    Описание:

    Официальный сайт: http://www.libsdl.org/projects/SDL_ttf/

    SDL_ttf 2.0 представляет собой библиотеку отрисовки шрифтов TrueType, и используется вместе с библиотекой SDL. Это позволяет программистам использовать шрифты TrueType без написания собственного рендера шрифта. Благодаря функциям масштабирования шрифтов и антиалиасинга можно получить высокое качество вывода текста без особых усилий.


    Сборка:

    Внимание! Зависимости:

    Библиотека FreeType 2

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.3.5.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_ttf 2.0, на момент написания статьи последняя версия 2.0.11: SDL_ttf-2.0.11.tar.gz

    2.3.5.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_ttf-2.0.11” .

    2.3.5.3. Компилируем и устанавливаем библиотеку SDL_ttf 2.0:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_ttf-2.0.11./configure --prefix=/mingw
    make
    make install

    Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “SDL_ttf.dll” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_ttf.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\SDL”

    2.3.5.5. На этом установка завершена. При желании можно скомпилировать утилиту “showfont.exe”:


    cd /c/Qt/build/SDL/SDL_ttf-2.0.11
    gcc showfont.c -o showfont -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_ttf

    Если на “showfont.exe” перетащить любой “*.ttf” шрифт – он откроется в окне.


    << Перейти к содержанию


    2.3.6. Компиляция и установка библиотеки SDL_mixer


    Описание:

    Официальный сайт: http://www.libsdl.org/projects/SDL_mixer/

    SDL_mixer это библиотека микширования звука, которая может использоваться вместе с библиотекой SDL. Она позволяет программистам использовать звуки вместе с музыкой и не писать собственные микшеры. Библиотека также упрощает загрузку, обработку и воспроизведения звуков и музыки всевозможных форматов файлов, в собираемой нами конфигурации библиотека сможет поддерживать такие форматы как “*.mp3”, “*.ogg”, “*.flac”, “*.mod” и несколько других.


    Сборка:

    Внимание! Зависимости:

    Библиотека SDL

    Библиотека OGG

    Библиотека OggVorbis (libVorbis)

    Библиотека FLAC

    Библиотека MikMod

    Библиотека MAD (libmad)

    Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

    2.3.6.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_mixer, на момент написания статьи последняя версия 1.2.12: SDL_mixer-1.2.12.tar.gz

    2.3.6.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_mixer-1.2.12”.

    2.3.6.3. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in” и заменяем одинаковые строки #69 и #72:


    $(LIBTOOL)--mode=link $(CC)-o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(SDL_LIBS) $(objects)/$(TARGET)

    на строку


    $(LIBTOOL)--mode=link $(CC)-o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)

    после замены сохраняем файл.

    2.3.6.4. Компилируем и устанавливаем библиотеку SDL_mixer:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


    cd /c/Qt/build/SDL/SDL_mixer-1.2.12./configure --enable-music-mp3-mad-gpl --disable-music-mp3 --disable-music-fluidsynth-midi --prefix=/mingw
    make
    make install

    Настоятельно рекомендую использовать декодер MAD, вместо нестабильного и старого smpeg. Если у вас в процессе конфигурирования не подцепляется FLAC, попробуйте сначала ввести строчку:


    export LIBS="-L/mingw/lib -logg -lws2_32"

    А потом уже выполнять конфигурирование. Без этой строки “conftest.c” может не слинковаться. После компиляции не забудьте выполнить:


    export-n LIBS

    Чтобы очистить переменную окружения LIBS.


    Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


    ./configure --help

    2.3.6.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая библиотека “SDL_mixer.dll” в “C:\Qt\MinGW\bin”

    Статическая “libSDL_mixer.a” и остальные в “C:\Qt\MinGW\lib”

    Хэдер “SDL_mixer.h” в “C:\Qt\MinGW\include\SDL”

    2.3.6.6. В комментариях обнаружилась интересная ошибка на стадии линковки, при компилировании библиотеки SDL_mixer компилятором MinGW (GCC 4.7.2). Ошибка возникала из-за того, что libtool, используевшийся для компиляции в SDL_mixer не мог подлинковать библиотеку libpthread, отвечающую за потоки и нужную для дефолтного конфигурирования libmikmod. В данном блоке показана последовательность действий, выполнив которые вы сохраните многопоточность библиотеки libmikmod и сможете скомпилировать и установить библиотеку SDL_mixer.

    Все действия актуальны на момент написания этого блока (04.06.2012).


    Все библиотеки в зависимостях, кроме MikMod, конфигурируются, компилируются и устанавливаются стандартно.

    Библиотека “libmikmod-3.2.0” конфигурируется теперь так:


    export CFLAGS="-march=native"./configure --prefix=/mingw
    make
    make install
    export-n CFLAGS

    И, наконец, библиотека “SDL_mixer-1.2.12” компилируется так:

    2.3.6.6.1. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in” и заменяем строки #26, #69 и #72 на следующие,


    LDFLAGS =-pthread @BUILD_LDFLAGS@
    $(LIBTOOL)--mode=link $(CC)-o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)
    $(LIBTOOL)--mode=link $(CC)-o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)

    сохраняя порядок соответственно.


    Затем обычное конфигурирование и компиляция:


    ./configure --enable-music-mp3-mad-gpl --disable-music-mp3 --disable-music-fluidsynth-midi --prefix=/mingw
    make
    make install

    Стоит заметить, что теперь приложения, использующие SDL_mixer будут еще требовать и библиотеку “pthreadGC2.dll”. В комментариях есть примеры сборок SDL_mixer без libmikmod’a или с libmikmod’ом, но без потоков.

    2.3.6.7. На этом установка завершена. Для проверки правильности работы библиотеки можно скомпилировать простейший плеер “sdlwav.exe”. Для этого нужно скачать файл “sdlwav.c“, сохранить его в папку “C:\Qt\build\SDL” и скомпилировать его следующим образом:


    cd /c/Qt/build/SDL
    gcc sdlwav.c -o sdlwav -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_mixer

    Теперь если на “sdlwav.exe” перетащить любой файл, содержащий музыку или звук в формате “*.mp3”, “*.flac”, “*.ogg”, “*.wav” или “*.mod” – он должен воспроизвестись, помимо этого должно открыться окно простенького визуализатора, если окно с ним активно то можно перемотать трек стрелками на клавиатуре или поставить его на паузу пробелом.


    Работа библиотеки SDL_mixer, скомпилированной MinGW&quot;ом


    После запуска в файле “stdout.txt” (он будет рядом с “sdlwav.exe”), или в выводе консоли будут показаны доступные декодеры и их количество. Для нашей конфигурации SDL_mixer получился следующий лог:


    BeforeMix_Init SDL_mixer supported:NoneAfterMix_Init SDL_mixer supported: FLAC MOD OGG 
    There are 5 available chunk(sample) decoders:
    	WAVE
    	AIFF
    	VOC
    	OGG
    	FLAC
    There are 6 available music decoders:
    	WAVE
    	MIKMOD
    	NATIVEMIDI
    	OGG
    	FLAC
    	MP3
    Opened audio at 44100Hz16 bit stereo,1024 bytes audio buffer
    Music type: MUS_MP3_MAD

    << Перейти к содержанию



    http://exlmoto.ru/mingw-development-environment/

    Установка MinGW/MSYS и настройка окружения для разработчика часть 2

    $
    0
    0

    1.5. Установка Subversion (svn)


    Официальный сайт svn: http://subversion.apache.org/

    Subversion или svn, это свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.


    1.5.1. Установка svn из бинарного пакета:

    1.5.1.1. Для того чтобы получить бинарный пакет svn, необходимо пройти процедуру регистрации на сайте http://www.collab.net/

    1.5.1.2. После регистрации переходим на страницу загрузки http://www.collab.net/downloads/subversionи загружаем последнюю версию “Subversion command-line binaries”, под версию своей операционной системы. На момент написания статьи последняя версия 1.7.8.

    1.5.1.3. Установка предельно проста. Запускаем установщик, и выбираем установочный путь, например, “C:\Qt\SVN”, затем жмем “Next” и Subversion установлен.

    1.5.1.4. Проверить его работу можно набрав в консоли svn. После запуска должна появится строка “Type ‘svn help’ for usage.”


    1.5.2. Список полезных команд, советов:

    Помимо CollabNetSubversion существует еще одна версия клиента Subversion под Windows с более глубокой интеграцией в проводник, это TortoiseSVN.

    Команды:


    svn co http://(svn://)repository.url/svn/name # получаем файлы из репозитория, полная команда: svn checkout
    svn up # получаем обновления из репозитория, полная команда: svn update
    svn update -r rev_num ./file_name # извлекаем ревизию файла с номером rev_num
    svn add ./filename # добавляем файл в репозиторий (текстовый или бинарный)
    svn commit ./filename # заливаем файл в репозиторий (текстовый или бинарный)
    svn rename ./old_filename ./new_filename # переименовываем файл в репозитории
    svn remove ./file_name # удаляем файл/директорию из репозитория
    svn st # просматриваем локально измененные файлы, полная команда: svn status
    svn st -u # просматриваем локально измененные и изменившиеся в репозитории файлы
    svn diff ./filename # показывает локальные изменения в файле построчно
    svn diff -r rev_num1:rev_num2 ./filename # показывает различия между двумя ревизиями файла
    svn revert ./filename # откатывает локальные изменения файла той, что в данный момент в репозитории
    svn revert -R ./# откатывает все локальные изменения файлов
    svn log ./filename # список ревизий с комментариями
    svn blame ./filename # показывает авторов изменений файла построчно
    svn cleanup # снимает блокировки с файлов
    svn info ./filename # Узнать информацию о файле
    svn unlock http://repository.url/svn/file_name # снять блокировку файла
    svn copy http://repository.url/svn/name/trunk/ http://repository.url/svn/name/branches/new_branch_name/ # создаем ветку
    svn merge -r rev_num1:rev_num2 http://repository.url/svn/name/trunk/ # синхронизирует вашу ветку с главной линией разработки

    << Перейти к содержанию


    1.6. Компиляция и установка git


    Официальный сайт git: http://git-scm.com/

    git – это распределённая система управления версиями файлов. Проект git был создан Линусом Торвальдсом, чтобы облегчить процесс управления разработкой ядра Linux, первая версия git’a выпущена 7 апреля 2005 года.

    На сегодняшний день множество проектов используют git, наиболее крупные и значимые: ядро Linux, Android, MediaWiki.


    Перейти к установке git из бинарного пакета >>


    1.6.1. Компиляция git:

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

    Во-первых, git не может распознать адреса репозиториев, начинающихся на http или https, однако доступ по ssh работает отлично.

    Во-вторых во время компиляции git раздувается до невероятных размеров (~700 MB), по идее размер можно намного урезать, если подлинковать динамические библиотеки, а не статические.

    Настоятельно рекомендую воспользоваться официальным установщиком для Windows!

    Если вы всё-таки захотели попробовать скомпилировать git, необходимо для начала скомпилировать и установить все его зависимости:

    Зависимости:

    Библиотека Expat

    Библиотека cURL (libcurl)

    Библиотека OpenSSL

    1.6.1.1. Скачиваем стабильную версию исходников git с официального сайта (на данный момент последняя версия 1.8.1): git-1.8.1.tar.gz.

    1.6.1.2. Распаковываем архив в папку “C:\Qt\build”, исходники git’a должны быть в папке “C:\Qt\build\git-1.8.1”.

    1.6.1.3. Открываем файл “C:\Qt\build\git-1.8.1\Makefile” и изменяем строку #2455 на:


        $(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)-lgdi32 -lws2_32

    После изменения сохраняем файл.

    1.6.1.4. Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или удобный ConEmu, установку которого я расписал выше, и набираем в консольном окне такие команды:


    cd /c/Qt/build/git-1.8.1
    make CURLDIR=/mingw NO_TCLTK=YesPlease NO_GETTEXT=YesPlease INSTALL=/bin/install prefix=/mingw install

    1.6.1.5. git будет скомпилирован и установлен в MinGW окружениие.


    1.6.2. Установка git из бинарного пакета:

    1.6.2.1. Скачиваем стабильную версию установщика git с официального сайта (на данный момент последняя версия 1.8.0): Git-1.8.0-preview20121022.exe, 14.5 MB, git полностью совместим с окружением MinGW.

    1.6.2.2. Запускаем установщик и следуем указанным инструкциям. После установки git занимает приблизительно 220 MB. Я устанавливал git в папку “C:\Qt\Git” со следующими параметрами (увеличить изображение можно по клику):


    Установка git windows


    1.6.2.3. Git готов к работе! Если у вас была запущена консоль, перезапустите её и удостоверьтесь, что git прописался в PATH и отлично вызывается командой “git”.


    1.6.3. Полезные команды и советы, создаем наш первый репозиторий на github.com:

    1.6.3.1. Регистрируемся на github.com (Sign up) и подтверждаем свой электронный ящик.

    1.6.3.2. Создаем новый репозиторий: github.com/new, заполняем как вам удобно все поля. После заполнения нажимаем кнопку “Create Repository”.

    1.6.3.3. Теперь на локальном компьютере нужно создать файл ключа и записать его в профиль на гитхабе. Для этого выполняем в терминале следующее:


    cd ~/.ssh
    mkdir key_backup
    cp id_rsa* key_backup
    rm id_rsa*
    ssh-keygen -t rsa -C "your_reg_github_email@youremail.com" #после строки (.ssh/id_rsa)нажимаем"Enter".Enter passphrase (empty forno passphrase):#тут мы вводим фразу-пароль (текст не отображается, не бойтесь), подтверждаем ее и нажмимаем "Enter".
    clip <~/.ssh/id_rsa.pub

    Сгенерированный ключ скопируется в буфер обмена после выполнения последней команды.

    1.6.3.4. Теперь нам нужно просто зайти на гитхабе в настройки ssh, нажать “Add Key”, скопировать ключ в большое поле и подтвердить действие.

    1.6.3.5. Следующий шаг – создание локального репозитория на своём компьютере. Создадим для этого дела папку “C:\Qt\Repo”. И введем в терминал такие команды:


    cd /c/Qt/Repo
    git config --global user.email "ваш_ящик_указанный_при_реге_на_гитхабе@mail.com"
    git config --global user.name "ваше_никнейм_на_гитхабе"
    touch README.md
    echo "# Hello GitHub\!">> README.md
    git init
    git add README.md
    git commit -m "first commit"
    git remote add origin https://github.com/Ваше_имя/Test.git
    git push -u origin master

    При выполнении этих команд у вас спросят имя и пароль, которые вы вводили при регистрации. В случае, если вы заходите по ssh (git@github.com:ВашеИмя/Test.git), вам будет предложено ввести фразу-пароль. После выполнения команд в репозиторий на гитхабе добавится файл “README.md”.


    1.6.3.6. Описание команд git’a.


    git config --global user.email "ваш_ящик_указанный_при_реге_на_гитхабе@mail.com"# устанавливает ваш почтовый ящик.
    git config --global user.name "ваше_никнейм_на_гитхабе"# устанавливает глобально ваше имя.
    git init # инициализация нового репозитория.
    git add .# добавление новых файлов в репозиторий (индексация).
    git status # позволяет увидеть, какие файлы находятся в зоне ожидания.
    git reset # сбросить весь индекс
    git reset - filename # удалить из индекса изменения определенного файла.
    git commit -m "Initial commit"# сохранение изменений.
    git log # список сообщений о ваших фиксациях.
    git checkout -f # откат изменений до предыдущей фиксации.######## Отправка на сервер GitHub: ###################
    git remote add origin git@github.com:username/name_repo.git
    git push origin master
    #######################################################
    git checkout -b name_branch # создание новой ветки репозитория и переход на нее.
    git branch # перечисление списка локальных веток.
    git checkout master # переход на основную ветку.
    git merge name_branch # объединение текущей ветки с name_branch.
    git branch -d name_branch # удаление ветки######## Отправка изменений на GitHub: ###################
    git push
    git push ssh://yourserver.com/~you/proj.git master:experimental# отправить изменения из ветки master в ветку experimental удаленного репозитория.
    git push origin :experimental
    # в удаленном репозитории origin удалить ветку experimental.
    git push origin master:master
    # в удаленную ветку master репозитория origin (синоним репозитория по умолчанию)# отправить изменения из локальной ветки master.######## Создаем у себя копию удаленного репозитория: ####
    git clone git://github.com/username/project.git master##########################################################
    git pull -забираемпоследниеизменениявпроекте.
    git rm FILE1 FILE2 -удалениефайлаизрепозитория.

    1.6.3.7. Что можно почитать про git?



    1. Введение в git

    2. Как начать работать с GitHub: быстрый старт

    3. Работа с git для начинающих


    << Перейти к содержанию


    2. Компиляция и установка библиотек в тулчейн MinGW


    Для сборки и создания различных проектов вам возможно потребуются различные библиотеки. В этом разделе описана компиляция и установка наиболее популярных и используемых библиотек. Установка большинства либ сводится к простому копированию заголовочных файлов, статических и динамических библиотек в соответствующие корневые директории тулчейна MinGW. Файлы с расширением “*.dll” – это динамические библиотеки, они копируются в директорию “C:\MinGW\bin”, файлы с расширением “*.lib” или “*.a” – статические библиотеки, содержащие запакованные объектные модули, их место в “C:\MinGW\lib”. Заголовочные файлы с расширениями “*.h”, “*.hxx” или “*.hpp” должны располагаться в “C:\MinGW\include”.

    Если вы устанавливаете уже скомпилированную библиотеку, проверьте, возможно ли её использовать с объектными модулями, которые генерирует компилятор MinGW.


    << Перейти к содержанию


    2.1. Компиляция и установка библиотеки FreeGLUT


    Описание:

    Официальный сайт: http://freeglut.sourceforge.net/

    FreeGLUT – это свободная и открытая реализация библиотеки OpenGL Utility Toolkit (GLUT), библиотека FreeGLUT предоставляет пользователю функции создания и управления окнами, которые содержат OpenGL-контекст на различных платформах, кроме того, библиотека позволяет отслеживать события клавиатуры, мышки и джойстика. Желательно использовать именно библиотеку FreeGLUT, вместо старого GLUT’а, так как библиотека работает значительно стабильнее на относительно новых операционных системах (Windows Vista, 7, 8) и поддерживает OpenGL версии 3.1.

    FreeGLUT выпущен под лицензией X-Consortium.


    Сборка:

    2.1.1. Скачиваем последнюю версию исходников библиотеки FreeGLUT, на момент написания статьи это 2.8.0: freeglut-2.8.0.tar.gz

    2.1.2. Распаковываем архив в папку “C:\Qt\build\GLUT”, исходники библиотеки должны быть в папке “C:\Qt\build\GLUT\freeglut-2.8.0″.

    2.1.3. Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или удобный ConEmu, установку которого я расписал выше, и набираем в консольном окне такие команды:


    cd /c/Qt/build/GLUT/freeglut-2.8.0./configure --prefix=/mingw
    make
    make install

    2.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки.

    Динамическая “libglut-0.dll” в “C:\Qt\MinGW\bin”

    Статические “libglut.a” и “libglut.dll.a” в “C:\Qt\MinGW\lib”

    Хэдеры в “C:\Qt\MinGW\include\GL”

    2.1.5. Компиляция и запуск демо-кода:

    2.1.5.1. Создаем файл “glutdemo.c” в папке “C:\Qt\build\GLUT”, вставляем в него такое содержимое:


    #include<GL/freeglut.h>void display(){
        glClear(GL_COLOR_BUFFER_BIT);
        glClearColor(1.0f,0.0f,0.0f,0.0f);
        glFlush();}int main(int argc,char**argv){
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutCreateWindow("Demo");
        glutDisplayFunc(display);
        glutMainLoop();return0;}

    и сохраняем.

    2.1.5.2. Для компиляции кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/GLUT
    gcc -mwindows glutdemo.c -o glutdemo -lopengl32 -lglut
    ./glutdemo.exe

    Данные команды скомпилируют код в исполнительный файл “glutdemo.exe”, при запуске которого создастся окно, полностью закрашенное в красный цвет:


    Работа библиотеки FreeGLUT, скомпилированной MinGW&quot;ом


    Параметр -mwindows нужен для того, чтобы приложение запускалось без консольного окна, если вам нужно консольное окно, компилируйте без этого параметра или с параметром -mconsole.

    Следует отметить, что для запуска «glutdemo.exe» необходимо добавить в переменную окружения PATH путь “C:\Qt\MinGW\bin”, подробнее смотрите пункт 1.1.1.1.


    << Перейти к содержанию


    2.2. Компиляция и установка библиотеки GLUT


    Описание:

    Официальный сайт порта для Win32: http://user.xmission.com/~nate/glut.html

    GLUT (OpenGL Utility Toolkit) это библиотека утилит для приложений под OpenGL, которая в основном отвечает за системный уровень операций ввода-вывода при работе с операционной системой. С помощью GLUT’а можно легко создать окно и управлять им. Кроме того библиотека позволяет: рисовать ряд простейших геометрических примитивов, отслеживать события клавиатуры и мыши, создавать несложные всплывающие меню и т. д. GLUT позволяет облегчить изучение OpenGL, так как для его использования не требуется знать API управления окнами. Библиотека GLUT была написана Mark’ом Kilgard’ом, а затем портирована на Windows Nate’ом Robins’ом.

    Следует отметить, что порт библиотеки GLUT не обновлялся с 2001-го года, ее реализация работает достаточно нестабильно в современных операционных системах, поэтому ее рекомендуется заменять более новой библиотекой FreeGLUT.


    Сборка:

    2.2.1. Скачиваем последнюю версию исходников библиотеки GLUT, на момент написания статьи это 3.7.6: glut-3.7.6-src.zip

    2.2.2. Распаковываем архив в папку “C:\Qt\build\GLUT”, исходники библиотеки должны быть в папке “C:\Qt\build\GLUT\glut-3.7.6”.

    2.2.3. Открываем файл “C:\Qt\build\GLUT\glut-3.7.6\include\GL\glut.h” и добавляем после #if defined(_WIN32) (в строку #12) такие строки:


    #ifdef __MINGW32__
    #define APIENTRY __stdcall
    #define CALLBACK __stdcall
    #endif

    затем сохраняем файл.

    2.2.4. Открываем файл “C:\Qt\build\GLUT\glut-3.7.6\lib\glut\win32_winproc.c” и комментируем строчку #21:


    //#include <crtdbg.h>

    2.2.5. Открываем файл “C:\Qt\build\GLUT\glut-3.7.6\lib\glut\win32_util.c” и редактируем функцию int gettimeofday(struct timeval* tp, void* tzp) следующим образом:

    Смотрим условие if (QueryPerformanceCounter(&t)) (строка #35) и заменяем его тело на:


    LARGE_INTEGER f;double t_over_f;QueryPerformanceFrequency(&f);
    tp->tv_sec = t.QuadPart/f.QuadPart;
    t_over_f =((double)t.QuadPart/f.QuadPart);
    tp->tv_usec =(t_over_f - tp->tv_sec)*1000*1000;

    Это нам даст нормальную работу функции glutTimerFunc() в системах Windows Vista, 7 и 8.

    2.2.6. Скачиваем Makefile, созданный мной специально для сборки библиотеки GLUT, и переносим его в папку “C:\Qt\build\GLUT\glut-3.7.6”.

    2.2.7. Компилируем и устанавливаем библиотеку:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/GLUT/glut-3.7.6
    make
    make install

    2.2.8. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

    Динамическая “glut32.dll” в “C:\Qt\MinGW\bin”

    Статическая “libglut32.a” в “C:\Qt\MinGW\lib”

    Хэдер “glut.h” в “C:\Qt\MinGW\include\GL”

    Архив исходников glut-3.7.6_edit.7z, если вам лень самим добавлять изменения, нужно просто распаковать этот архив в папку “C:\Qt\build\GLUT”, и выполнить действия пункта 2.2.7. В архиве уже применены фиксы, описанные в пунктах выше.

    2.2.9. Компиляция и запуск демо-кода.

    2.2.9.1. Создаем файл “oldglutdemo.c” в папке “C:\Qt\build\GLUT”, вставляем в него такое содержимое:


    #include<GL/glut.h>void display(){
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0f,0.0f,0.0f);
        glBegin(GL_QUADS);
            glVertex2f(-0.5,0.5);
            glVertex2f(0.5,0.5);
            glVertex2f(0.5,-0.5);
            glVertex2f(-0.5,-0.5);
        glEnd();
        glFlush();}int main(int argc,char**argv){
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutCreateWindow("Demo");
        glutDisplayFunc(display);
        glutMainLoop();return0;}

    и сохраняем.

    2.2.9.2. Для компиляции и запуска кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


    cd /c/Qt/build/GLUT
    gcc -mwindows oldglutdemo.c -o oldglutdemo -lopengl32 -lglut32
    ./oldglutdemo.exe

    Приложение “oldglutdemo.exe” создаст окно с красным квадратом по центру:


    Работа библиотеки GLUT, скомпилированной MinGW&quot;ом


    << Перейти к содержанию



    http://exlmoto.ru/mingw-development-environment/

    Установка MinGW/MSYS и настройка окружения для разработчика часть 1

    $
    0
    0

    Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним – наиболее приемлемый выбор.

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

    Статья со временем будет обновляться и дополняться.

    MinGW/MSYS и QtCreator


    Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.


    Содержание:


    1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО

    1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение

    1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat

    1.3. Компиляция и установка pkg-config

    1.4. Установка CMake, примеры использования

    1.5. Установка Subversion (svn)

    1.6. Компиляция и установка git

    2. Компиляция и установка библиотек в тулчейн MinGW

    2.1. Компиляция и установка библиотеки FreeGLUT

    2.2. Компиляция и установка библиотеки GLUT

    2.3. Компиляция и установка библиотек SDL-окружения

    2.3.1. Компиляция и установка основной библиотеки SDL

    2.3.2. Компиляция и установка библиотеки SDL_image

    2.3.3. Компиляция и установка библиотеки SDL_net

    2.3.4. Компиляция и установка библиотеки SDL_gfx

    2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0

    2.3.6. Компиляция и установка библиотеки SDL_mixer

    2.3.7. Компиляция и установка библиотеки SDL_sound

    2.3.8. Компиляция и установка библиотеки SDL_draw

    2.3.9. Компиляция и установка библиотеки SDL_console

    2.4. Компиляция и установка zlib библиотеки

    2.5. Компиляция и установка JPEG библиотеки

    2.6. Компиляция и установка PNG библиотеки

    2.7. Компиляция и установка TIFF библиотек

    2.8. Компиляция и установка библиотеки FreeType 2

    2.9. Компиляция и установка OGG библиотеки

    2.10. Компиляция и установка OggVorbis (libVorbis) библиотеки

    2.11. Компиляция и установка FLAC библиотеки

    2.12. Компиляция и установка библиотеки MikMod

    2.13. Компиляция и установка библиотеки MAD (libmad)

    2.14. Компиляция и установка библиотеки OpenAL

    2.15. Компиляция и установка библиотеки ALUT (freealut)

    2.16. Компиляция и установка cURL (libcurl) библиотеки

    2.17. Компиляция и установка библиотеки libmodplug

    2.18. Компиляция и установка библиотеки и утилит OpenSSL

    2.19. Компиляция и установка библиотеки Expat

    2.20. Компиляция и установка библиотеки ZZIPlib

    3. Интеграция MinGW с IDE


    1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО


    Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.


    MinGW– сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.

    MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.

    MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.

    MinGW включает в себя:



    • Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.

    • Порт GNU Binutils для Windows (as, ld, ar)

    • Консольный установщик (mingw-get) для MinGW и MSYS

    • Графический установщик (mingw-get-inst)


    MSYS– сокращение от “Minimal SYStem”, это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы “cmd.exe” от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.


    Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.

    Полезные ссылки:

    Официальный сайт MinGW

    Вики по MinGW [ENG]


    << Перейти к содержанию


    1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение


    1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426: mingw-get-inst-latest.exe

    Запускаем установщик, нажимаем “Next”, “Next”, выбираем “Use pre-packaged repository catalogues”:


    Установка тулчейна MinGW/MSYS


    Жмем “Next” и соглашаемся с лицензией, снова “Next”, и теперь выбираем путь для установки:


    Установка тулчейна MinGW/MSYS


    Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в “C:\MinGW”. Я выбрал “C:\Qt\MinGW”, так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите “Next”. Необходимость наличия группы ярлыков в меню “Пуск” – по вашему желанию. Но можно не создавать (отметив галочкой “Don’t create a Start Menu folder) и нажать “Next”.


    Выбираем следующие пакеты:



    • C Compiler

    • C++ Compiler

    • MSYS Basic System

    • MinGW Developer ToolKit


    и жмем “Next”


    Установка тулчейна MinGW/MSYS


    затем подтверждаем установку выбранных пакетов кнопкой “Install”.

    Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.

    Теперь необходимо добавить в переменную окружения PATH путь до директории “C:\Qt\MinGW\bin”. Делается это следующим образом (для Win7, для остальных систем по аналогии):

    1.1.1.1. Нажмите правой клавишей мышки на ярлык “Компьютер” и кликните на пункт меню “Свойства”.

    1.1.1.2. Кликните слева на пункт “Дополнительные параметры системы”, в появившемся окне нажмите кнопку “Переменные среды”.

    1.1.1.3. В верхнем списке переменных найдите переменную “Path”, кликните на нее два раза для редактирования.

    1.1.1.4. Добавьте путь до директории “\bin”. В моем случае это будет “C:\Qt\MinGW\bin”, разделение путей выполняется символом “;”.


    Переменная PATH


    1.1.1.5. Подробнее можно прочесть здесь.

    Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.


    1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.

    Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.

    Для этого запускаем файл “C:\Qt\MinGW\msys\1.0\msys.bat”, для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши “Enter”):


    mingw-get install msys-man
    mingw-get install msys-wget
    mingw-get install msys-zip
    mingw-get install msys-unzip
    mingw-get install msys-bzip2
    mingw-get install msys-perl

    Команда “mingw-get install” аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде “apt-get install”. Обе эти команды скачают и установят вам нужный пакет из репозиториев.

    Список доступных пакетов для установки можно посмотреть по команде “mingw-get show”, для лучшего восприятия его можно отсортировать следующим образом:


    mingw-get show | grep "Package: "

    Удалить установленный пакет можно командой “mingw-get remove выбранный_вами_пакет”

    Обновить пакет можно командой “mingw-get upgrade выбранный_вами_пакет”, команда “mingw-get upgrade” обновит все пакеты вашего тулчейна полностью.

    На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.

    1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?

    Для редактирования исходников и других файлов можно использовать консольный редактор “vim”, который идет в комплекте с MinGW’ом.

    Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором – Notepad++.

    Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.

    Лично я рекомендую использовать 7-zip.

    1.1.4. Что можно почитать?

    Список литературы можно найти здесь: http://www.linuxcenter.ru/

    Основы работы в консоли

    Интерпретатор командного языка shell

    Самые необходимые команды *nix для обработки ввода/вывода

    Совет по поводу определения fstab


    << Перейти к содержанию


    1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat


    Возможно многим разработчикам стандартный шел, вызываемый по “msys.bat” покажется унылым и скучным:


    Стандартное окно MSYS тулчейна MinGW


    Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.

    Но к счастью, есть такой проект как ConEmuот Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.

    ConEmu – это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания “Alt + Левая кнопка мышки” можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш “Ctrl + V” или клик левой клавишей мышки вставляет первую строку из буфера, а “Shift + Insert + Enter” вставляет сразу все строки.

    Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна – нужно лишь распаковать “-mingw32” и “-mingw64” пакеты в корневую папку компилятора (в моем случае это “C:\Qt\MinGW”).

    Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:

    Скачать ConEmu.zip, 1.7 MB

    Выглядит она следующим образом (изображение кликабельно):


    Стандартное окно sh в MinGW


    И устанавливается абсолютно аналогично.

    На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию “Ctrl + ~”, не только эффектно выглядит, но и очень удобна в использовании.

    При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.


    << Перейти к содержанию


    1.3. Компиляция и установка утилиты pkg-config


    Официальный сайт pkg-config: http://pkg-config.freedesktop.org/

    pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.

    В нашем случае она нужна для компиляции некоторых библиотек и проектов.

    1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28: pkg-config-0.28.tar.gz

    1.3.2. Распаковываем архив в папку “C:\Qt\build”, исходники pkg-config’а должны быть в папке “C:\Qt\build\pkg-config-0.28”.

    1.3.3. Компилируем pkg-config и библиотеку GNU C Library (glibc), идущую в комплекте:

    Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:

    Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом “-jX”, где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: “make -j3” и “make -j3 install”. Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.


    export CFLAGS="-march=native"
    cd /c/Qt/build/pkg-config-0.28./configure --with-internal-glib --prefix=/mingw
    make
    make install
    export-n CFLAGS

    Утилита и библиотека скомпилировались и установились.

    1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:


    cat >/mingw/bin/pkg-config.sh <<"EOF"#!/bin/shif pkg-config "$@">/dev/null2>&1;then
    res=trueelse
    res=falsefi
    pkg-config "$@"| tr -d \\r && $res
    
    EOF

    Это создаст файл “pkg-config.sh” в папке “C:\Qt\MinGW\bin”

    1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:


    chmod ugo+x /mingw/bin/pkg-config.sh && \
    echo "PKG_CONFIG=/mingw/bin/pkg-config.sh">>/etc/profile.local&& \
    echo "export PKG_CONFIG">>/etc/profile.local

    1.3.6. Когда вам понадобится альтернативное окружение, вы всегда можете подгрузить его командой:


    source /etc/profile.local

    << Перейти к содержанию


    1.4. Установка CMake, примеры использования


    Официальный сайт CMake: http://www.cmake.org

    CMake (cross platform make) – это кроссплатформенная система автоматизации генерации файлов для сборки программного обеспечения из исходного кода.

    CMake не занимается непосредственно сборкой исходных кодов, он лишь генерирует файлы для управления сборкой проекта из файлов “CMakeLists.txt”. Это могут быть:



    • Обычные Makefile, которые используются в системах Unix для сборки с помощью утилиты make;

    • Файлы projects/workspaces (*.dsp/*.dsw) в системах Windows для сборки с помощью Microsoft Visual C++;

    • Проекты XCode в Mac OS X.


    1.4.1 Установка CMake:

    1.4.1.1. Скачиваем установочный пакет CMake с официального сайта (последняя версия на момент написания статьи – 2.8.10.2): cmake-2.8.10.2-win32-x86.exe

    1.4.1.2. Сохраняем установочный пакет в любое удобное для вас место и запускаем “cmake-2.8.10.2-win32-x86.exe”.

    1.4.1.3. Щелкаем “Далее”, соглашаемся с лицензией, выбираем пункт “Add CMake to the system PATH for all users”


    Установка CMake


    Эта опция установит в переменную окружения PATH ту папку, в которой будет установлен CMake.

    Ярлык создаем по желанию, щелкаем “Далее”.

    1.4.1.4. Выбираем папку, в которую будет установлен CMake. Я рекомендую выбрать папку “C:\Qt\CMake”, так как потом можно будет легко интегрировать его со средой разработки (IDE). Щелкаем “Далее”.


    Установка CMake


    1.4.1.5. При желании можно создать группу ярлыков в меню “Пуск”. Щелкаем “Установить”, ждем окончания установки и нажимаем “Готово”. Всё! CMake установлен.


    1.4.2 Примеры использования CMake:

    1.4.2.1. Немного основ, общие советы.

    Для сборки проекта с помощью CMake в корневой директории проекта создается файл “CMakeLists.txt”, описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:

    Компиляция и установка библиотеки OpenAL

    Компиляция и установка библиотеки ALUT (freealut)

    1.4.2.2. Пример моего “CMakeLists.txt” для сборки примера “oldglutdemo.c” из пункта 2.2.9.1, с использованием библиотеки GLUT:


    project(GLUT-Req)
    cmake_minimum_required(VERSION 2.8)
    aux_source_directory(. SRC_LIST)set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}"C:/Qt/MinGW/lib")set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}"C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")##########################################################
    find_package(OpenGL REQUIRED)if(NOT OPENGL_FOUND)
        message(SEND_ERROR "Failed to find OpenGL")return()else()
        include_directories(${OPENGL_INCLUDE_DIR})
    endif()##########################################################
    find_package(GLUT REQUIRED)if(NOT GLUT_FOUND)
        message(SEND_ERROR "Failed to find GLUT")return()else()
        include_directories(${GLUT_INCLUDE_DIR})
    endif()##########################################################
    
    link_libraries(${OPENGL_LIBRARY} ${GLUT_LIBRARIES})
    add_executable(${PROJECT_NAME} ${SRC_LIST})

    Текст выше нужно выделить и сохранить в файл с именем “CMakeLists.txt”, затем файл “oldglutdemo.c” и “CMakeLists.txt” нужно поместить в отдельную папку, например “C:\Qt\build\GLUT\glut-3.7.6\cmake-test”.

    Далее набираем в консольном окне такие команды:


    cmake -G "MSYS Makefiles"
    make
    make install

    И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:


    set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}"C:/Qt/MinGW/lib")set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}"C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")

    Без установки этих переменных CMake не видит библиотеку GLUT.

    1.4.2.3. Переменные:


    cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw"-DCMAKE_C_FLAGS:STRING="-march=i686"-DCMAKE_CPP_FLAGS:STRING=""-DCMAKE_CXX_FLAGS:STRING="" \
    -DCMAKE_EXE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib"-DCMAKE_MODULE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" \
    -DCMAKE_SHARED_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib"-G "MSYS Makefiles"

    Из названий переменных все должно быть понятно:


    -DCMAKE_INSTALL_PREFIX:PATH #- путь, куда будет устанавливаться программа после "make install".-DCMAKE_C_FLAGS:STRING #- Установка флагов для файлов "*.c"-DCMAKE_CPP_FLAGS:STRING /-DCMAKE_CXX_FLAGS:STRING #- Установка флагов для файлов "*.cpp"и "*.cxx"соответственно.-DCMAKE_EXE_LINKER_FLAGS:STRING /-DCMAKE_MODULE_LINKER_FLAGS:STRING /-DCMAKE_SHARED_LINKER_FLAGS:STRING #- Установка файлов линковки.

    Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:


    cd build_project/
    cmake -G "MSYS Makefiles"--build ../project/src/

    В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.


    1.4.2.4. Кросскомпиляция с помощью CMake.

    В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:


    # this one is important
    SET(CMAKE_SYSTEM_NAME Linux)#this one not so much
    SET(CMAKE_SYSTEM_VERSION 1)# specify the cross compiler
    SET(CMAKE_C_COMPILER   /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)
    SET(CMAKE_CXX_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)# where is the target environment 
    SET(CMAKE_FIND_ROOT_PATH  /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst)# search for programs in the build host directories
    SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)# for libraries and headers in the target directories
    SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

    И конфигурируем проект:


    cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-eldk-ppc74xx.cmake

    Если переменная “CMAKE_FIND_ROOT_PATH_MODE_PROGRAM” установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога “CMAKE_FIND_ROOT_PATH/bin”. В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию “CMAKE_FIND_ROOT_PATH/bin”. В противном случае, при сборке проекта может возникать следующая ошибка:


    Error running link command:No such file or directory

    Подробнее можно прочесть тут: CMake Cross Compiling


    1.4.3 Что почитать про CMake? (литература):

    Из наиболее полезного:



    1. CMake Documentation [ENG]

    2. Введение в CMake [RUS]

    3. Используем Cmake для создания Makefile [RUS]


    << Перейти к содержанию



    http://exlmoto.ru/mingw-development-environment/

    Сборка в Ubuntu приложений для Windows

    $
    0
    0

    Сборка в Ubuntu приложений для Windows


    Представим себе ситуацию. Вы дома работаете только в Ubuntu и не
    используете Windows, разработку приложений осуществляете с помощью
    Qt Creator и библиотеки Qt. Требуется собрать приложение для
    Windows (чтобы использовать его, например, на работе). Qt Creator
    – кроссплатформенная среда разработки и позволяет выполнить
    эту задачу, т.е. собрать приложение для Windows в Ubuntu. Для этого
    необходимо один раз настроить свою среду для выполнения такой задачи,
    а затем пользоваться.


    Сначала необходимо установить компилятор MinGW. Для этого запускаем
    Центр приложений Ubuntu, набираем в строке
    поиска mingw32, в найденном выделяем строку
    Minimalist GNU win32 (cross) compilerи
    нажимаем кнопку Установить. В результате будут установлены 3 пакета


    mingw32_4.2.1.dfsg-2ubuntu1_i386.deb

    mingw32-binutils_2.20-0.2_i386.deb

    mingw32-runtime_3.15.2-0ubuntu1_all.deb


    (версии файлов на момент написания статьи),


    а непосредственно сам компилятор появится в папках
    /usr/i586-mingw32msvcи /usr/amd64-mingw32msvc,
    мы будем ориентироваться на первую.


    Замечание. Если требуется установить компилятор на компьютер, на
    котором нет доступа в интернет, можно воспользоваться способом, изложенным в соответствующей
    статье.


    Следующим шагом надо раздобыть необходимые файлы библиотеки Qt
    для платформы Windows. Проще всего их взять на другом компьютере
    с этой платформой. Пусть библиотека Qt установлена в папку C:\Qt\qt-4.8.2,
    тогда выполняем следующие действия


    1. Создаем в какой-либо временной папке, например,
    D:\TEMP, папку qt4-win,
    в которой будем собирать нужные файлы.


    2. Копируем содержимое папок C:\Qt\qt-4.8.2\include
    и C:\Qt\qt-4.8.2\libсоответственно в папки
    D:\TEMP\qt4-win\includeи D:\TEMP\qt4-win\lib.


    3. Заголовочные файлы из папки C:\Qt\qt-4.8.2\include
    ссылаются на файлы из папки C:\Qt\qt-4.8.2\src,
    ее содержимое нам тоже надо получить. Если у Вас достаточно места,
    лучше просто скопировать эту папку целиком (она весит больше 200
    MB) в папку D:\TEMP\qt4-win\src. Однако,
    есть у меня подозрение, что из этой папки могут потребоваться только
    заголовочные файлы, по крайней мере, мне ни разу не встретилась
    ситуация, когда бы это было не так. Поэтому, если есть желание сэкономить
    место на диске, скопируем только заголовочные файлы. Для этого заблаговременно
    создаем папку D:\TEMP\qt4-win\src, запускаем
    командную строку и выполняем команду


    xcopy C:\Qt\qt-4.8.2\src\*.h D:\TEMP\qt4-win\src /S


    В результате будут скопированы только заголовочные
    файлы с сохранением всех относительных путей, а размер папки D:\TEMP\qt4-win\src
    составит меньше 40 MB.


    4. Переносим папку D:\TEMP\qt4-win
    на свой компьютер в Ubuntu, располагаем ее содержимое, например,
    в /usr/qt4-win. Поскольку файлов очень много,
    переносить их лучше в архиве.


    5. После копирования (или распаковки) папки
    /usr/qt4-winпроверяем наличие доступа к
    ее содержимому.


    Замечание. Запись в папку /usr
    возможна только с правами ROOT. В графическом интерфейсе получить
    их можно, если нажать <Alt–F2>
    и в открывшемся окне ввести команду gksu nautilus.
    В результате после ввода пароля откроется файловый менеджер с правами
    ROOT. Для установки доступа к содержимому папки /usr/qt4-win
    можно кликнуть правой кнопкой мыши по ее значку в окне файлового
    менеджера, открытого с правами ROOT, выбрать пункт контекстного
    меню Свойстваи на вкладке Права
    установить следующее



    В заключение следует нажать кнопку Распространить
    права на вложенные файлы
    .


    Если Вы планируете использовать в своих приложениях библиотеку
    Qwt, необходимо иметь также файлы этой библиотеки, собранные для
    платформы Windows. Берем их опять же на другом компьютере с платформой
    Windows. Пусть библиотека Qwt установлена в папку C:\Qt\qwt-5.2.2,
    выполняем действия, аналогичные тем, что описаны выше.


    1. Создаем папку D:\TEMP\qwt5-win,
    в которой будем собирать нужные файлы.


    2. Копируем содержимое папок C:\Qt\qwt-5.2.2\include
    и C:\Qt\qwt-5.2.2\libсоответственно в папки
    D:\TEMP\qwt5-win\includeи D:\TEMP\qwt5-win\lib.


    3. Переносим папку D:\TEMP\qwt5-win
    на свой компьютер в Ubuntu, располагаем ее содержимое в /usr/qwt5-win.


    4. После копирования папки /usr/qwt5-win
    проверяем наличие доступа к ее содержимому.


    Далее необходимо создать новую спецификацию сборки, для этого в
    каталоге /usr/share/qt4/mkspecsсоздаем
    папку win32-x-g++, копируем в нее содержимое
    папки win32-g++из того же каталога и правим
    файл qmake.confиз новой папки так, как
    показано ниже в подсвеченных строках.



    исходный файл qmake.conf

     
    файл qmake.confс
    исправлениями

     
    ##
    # qmake configuration for win32-g++# qmake configuration for win32-x-g++
    #

    # Written for MinGW

    #



    MAKEFILE_GENERATOR = MINGW

    TEMPLATE = app

    CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release
    debug_and_release_target precompile_header

    QT += core gui

    DEFINES += UNICODE QT_LARGEFILE_SUPPORT

    QMAKE_COMPILER_DEFINES += __GNUC__ WIN32



    QMAKE_EXT_OBJ = .o

    QMAKE_EXT_RES = _res.o

     
    #

    # Written for MinGW

    #



    MAKEFILE_GENERATOR = MINGW

    TEMPLATE = app

    CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release
    debug_and_release_target precompile_header

    QT += core gui

    DEFINES += UNICODE QT_LARGEFILE_SUPPORT

    QMAKE_COMPILER_DEFINES += __GNUC__ WIN32



    QMAKE_EXT_OBJ = .o

    QMAKE_EXT_RES = _res.o

     
    QMAKE_CC = gccQMAKE_CC = i586-mingw32msvc-gcc
    QMAKE_LEX = flex

    QMAKE_LEXFLAGS =

    QMAKE_YACC = byacc

    QMAKE_YACCFLAGS = -d

    QMAKE_CFLAGS =

    QMAKE_CFLAGS_DEPS = -M

    QMAKE_CFLAGS_WARN_ON = -Wall

    QMAKE_CFLAGS_WARN_OFF = -w

    QMAKE_CFLAGS_RELEASE = -O2

    QMAKE_CFLAGS_DEBUG = -g

    QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses

     
    QMAKE_LEX = flex

    QMAKE_LEXFLAGS =

    QMAKE_YACC = byacc

    QMAKE_YACCFLAGS = -d

    QMAKE_CFLAGS =

    QMAKE_CFLAGS_DEPS = -M

    QMAKE_CFLAGS_WARN_ON = -Wall

    QMAKE_CFLAGS_WARN_OFF = -w

    QMAKE_CFLAGS_RELEASE = -O2

    QMAKE_CFLAGS_DEBUG = -g

    QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses

     
    QMAKE_CXX = g++QMAKE_CXX = i586-mingw32msvc-g++
    QMAKE_CXXFLAGS = $$QMAKE_CFLAGS

    QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS

    QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON

    QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF

    QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE

    QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG

    QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC

    QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD

    QMAKE_CXXFLAGS_RTTI_ON = -frtti

    QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti

    QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads

    QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions



    QMAKE_INCDIR =
    QMAKE_CXXFLAGS = $$QMAKE_CFLAGS

    QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS

    QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON

    QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF

    QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE

    QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG

    QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC

    QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD

    QMAKE_CXXFLAGS_RTTI_ON = -frtti

    QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti

    QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads

    QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions



    QMAKE_INCDIR =
    QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]QMAKE_INCDIR_QT = /usr/qt4-win/include
    QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]QMAKE_LIBDIR_QT = /usr/qt4-win/lib


    QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src

    QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

    QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src

    QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

     


    QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src

    QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

    QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src

    QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

     
    QMAKE_LINK = g++QMAKE_LINK = i586-mingw32msvc-g++
    QMAKE_LINK_C = gccQMAKE_LINK_C = i586-mingw32msvc-gcc
    QMAKE_LFLAGS =

    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

    QMAKE_LFLAGS_EXCEPTIONS_OFF =

    QMAKE_LFLAGS_RELEASE = -Wl,-s

    QMAKE_LFLAGS_DEBUG =

    QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console

    QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows

    QMAKE_LFLAGS_DLL = -shared

    QMAKE_LINK_OBJECT_MAX = 10

    QMAKE_LINK_OBJECT_SCRIPT= object_script

    QMAKE_PREFIX_STATICLIB = lib

    QMAKE_EXTENSION_STATICLIB = a





    QMAKE_LIBS =

    QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32
    -luser32 -lkernel32

    QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm
    -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32

    QMAKE_LIBS_NETWORK = -lws2_32

    QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32

    QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32
    -lgdi32 -lws2_32

    QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain



    !isEmpty(QMAKE_SH) {

    MINGW_IN_SHELL = 1

    QMAKE_DIR_SEP = /

    QMAKE_QMAKE ~= s,\\\\,/,

    QMAKE_COPY = cp

    QMAKE_STREAM_EDITOR = sed

    QMAKE_COPY_DIR = cp -r

    QMAKE_MOVE = mv

    QMAKE_DEL_FILE = rm

    QMAKE_MKDIR = mkdir -p

    QMAKE_DEL_DIR = rmdir

    QMAKE_CHK_DIR_EXISTS = test -d

    } else {

    QMAKE_COPY = copy /y

    QMAKE_COPY_DIR = xcopy /s /q /y /i

    QMAKE_MOVE = move

    QMAKE_DEL_FILE = del

    QMAKE_MKDIR = mkdir

    QMAKE_DEL_DIR = rmdir

    QMAKE_CHK_DIR_EXISTS = if not exist

    }

     
    QMAKE_LFLAGS =

    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

    QMAKE_LFLAGS_EXCEPTIONS_OFF =

    QMAKE_LFLAGS_RELEASE = -Wl,-s

    QMAKE_LFLAGS_DEBUG =

    QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console

    QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows

    QMAKE_LFLAGS_DLL = -shared

    QMAKE_LINK_OBJECT_MAX = 10

    QMAKE_LINK_OBJECT_SCRIPT= object_script

    QMAKE_PREFIX_STATICLIB = lib

    QMAKE_EXTENSION_STATICLIB = a





    QMAKE_LIBS =

    QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32
    -luser32 -lkernel32

    QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm
    -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32

    QMAKE_LIBS_NETWORK = -lws2_32

    QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32

    QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32
    -lgdi32 -lws2_32

    QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain



    !isEmpty(QMAKE_SH) {

    MINGW_IN_SHELL = 1

    QMAKE_DIR_SEP = /

    QMAKE_QMAKE ~= s,\\\\,/,

    QMAKE_COPY = cp

    QMAKE_STREAM_EDITOR = sed

    QMAKE_COPY_DIR = cp -r

    QMAKE_MOVE = mv

    QMAKE_DEL_FILE = rm

    QMAKE_MKDIR = mkdir -p

    QMAKE_DEL_DIR = rmdir

    QMAKE_CHK_DIR_EXISTS = test -d

    } else {

    QMAKE_COPY = copy /y

    QMAKE_COPY_DIR = xcopy /s /q /y /i

    QMAKE_MOVE = move

    QMAKE_DEL_FILE = del

    QMAKE_MKDIR = mkdir

    QMAKE_DEL_DIR = rmdir

    QMAKE_CHK_DIR_EXISTS = if not exist

    }

     
    QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exeQMAKE_MOC = /usr/share/qt4/bin/moc
    QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exeQMAKE_UIC = /usr/share/qt4/bin/uic
    QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exeQMAKE_IDC = /usr/share/qt4/bin/idc


    QMAKE_IDL = midl

    QMAKE_LIB = ar -ru


    QMAKE_IDL = midl

    QMAKE_LIB = ar -ru
    QMAKE_RC = windresQMAKE_RC = i586-mingw32msvc-windres
    QMAKE_ZIP = zip -r -9

     
    QMAKE_ZIP = zip -r -9

     
    QMAKE_STRIP = stripQMAKE_STRIP = i586-mingw32msvc-strip
    QMAKE_STRIPFLAGS_LIB += --strip-unneeded

    load(qt_config)
    QMAKE_STRIPFLAGS_LIB += --strip-unneeded

    load(qt_config)

    В заключение проверяем наличие доступа к содержимому
    папки /usr/share/qt4/mkspecs/win32-x-g++.


    Теперь все готово к сборке Ваших проектов для Windows. Сборка осуществляется
    из командной строки терминала. Для сборки в конфигурации Выпуск
    необходимо перейти в каталог с Вашим проектом и выполнить команды


    qmake -r -spec win32-x-g++

    make


    В результате должен появиться исполняемый файл с
    расширением exe. Для сборки в конфигурации
    Отладкакоманды имеют вид


    qmake -r -spec win32-x-g++ CONFIG+=debug

    make


    Несколько замечаний.


    1) Для однозначности в команде qmake
    можно указать файл своего проекта.


    2) В Windows для версий библиотеки Qt младше,
    чем 4.8.2, по умолчанию выбирается конфигурация сборки Отладка.
    Конфигурацию сборки Выпускнеобходимо в
    команде qmakeуказывать явно параметром
    CONFIG+=release. В Ubuntu, как видим, все
    наоборот. Для версии Qt 4.8.2 в Windows выбирается конфигурация
    сборки Выпуск (также как в Ubuntu), подробнее
    об этом читайте здесь.


    3) В Windows сборка проекта осуществляется в
    папки debugили release
    в зависимости от выбора конфигурации. В Ubuntu само по себе это
    не происходит, обе конфигурации собираются в одну и ту же папку.
    Если мы хотим добиться такого же порядка сборки как и в Windows,
    в файл проекта необходимо включить строки


    CONFIG(debug,debug|release)
    {

      MOC_DIR = debug

      RCC_DIR = debug

      OBJECTS_DIR = debug

      DESTDIR = debug

    } else {

      MOC_DIR = release

      RCC_DIR = release

      OBJECTS_DIR = release

      DESTDIR = release

    }


    4) Собирать приложение в Ubuntu для Windows
    в конфигурации Отладкабольшого смысла
    нет. Если отказаться от такой возможности, то можно уменьшить размер
    папок /usr/qt4-winи /usr/qwt5-win,
    удалив из них некоторые файлы библиотек, используемых только в конфигурации
    Отладка. Например, в папке /usr/qt4-win/lib
    имеются файлы


    libQtGui4.a

    libQtGuid4.a


    Второй файл используется только в конфигурации
    Отладка, поэтому его можно удалить. И далее
    по аналогии... После такой очистки размер папки/usr/qt4-win
    уменьшается со 104 до 64 MB, а размер папки /usr/qwt5-win
    – с 24 до 2,5 MB.


    Остается перенести сформированный exe-файл на компьютер с платформой
    Windows, но для его работы нужны dll-библиотеки Qt. Их можно взять
    на компьютере с установленной библиотекой Qt, они лежат в папке
    C:\Qt\qt-4.8.2\bin. Для большинства случаев
    достаточно только двух файлов – QtCore4.dll
    и QtGui4.dll. Кроме того, не забываем про
    dll-файлы библиотеки Qwt, если она используется в собранном приложении.
    Общий объем библиотек можно сократить, если брать только релизные
    версии файлов. Разместив dll-библиотеки в какой-либо папке, например,
    C:\Qt-dll, прописываем в системе путь к
    ней. Для этого кликаем правой кнопкой мыши по значку Мой
    компьютер
    , выбираем пункт контекстного меню Свойства,
    открываем вкладку Дополнительно, нажимаем
    кнопку Переменные среды, выбираем переменную
    Path, нажимаем кнопку Изменить
    и дописываем через точку с запятой путь


    C:\Qt-dll


    Теперь все приложения, использующие библиотеку Qt,
    будут работать на этом компьютере.


     


    При подготовке статьи использовался ресурс Qt
    & Ubuntu. Настраиваем среду для компиляции win32-приложений



    http://qtlinux.narod.ru/make_for_win.htm
    http://habrahabr.ru/post/98131/

    Как убрать шум с аудиозаписи

    $
    0
    0


    Как известно, качество звукозаписи у современных смартфонов, планшетов и ноутбуков оставляет желать лучшего, мягко говоря. Что же делать, если вам нужна качественная аудиозапись, а в вашем распоряжении лишь трек с жужжанием, шипением и бубнёжем? Ответ прост: установить программу Audacity в Ubuntu и применить чудо-фильтр Noise Removal, который сделает всю работу за вас.

    Audacity Noise Removal


    Как установить Audacity в Ubuntu



    apt-get install audacity

    Как убрать шум


    Запустите Audacity, откройте ваш аудиофайл для очистки. Вам потребуется найти в записи несколько секунд тишины. Они нужны для того, чтобы составить шумовой профиль записи. То есть, под тишиной понимается отсутствие внешних звуков (например, пауза между репликами). Именно в эти секунды на записи остается только так называемый белый шум, создаваемый самим звукозаписывающим девайсом и микрофоном. Именно этот белый шум и нужен для того, чтобы фильтр Noise Removal в Audacity мог составить математическую модель и «вычесть» посторонние звуки из основного потока.


    Убрать шум


    Ну так вот, запаситесь несколькими секундами тишины и перейдите в меню Effect. Там найдите фильтр Noise Removal. Появится окно, в котором вам будет предложено создать шумовой профиль. Смело жмите кнопку Get Noise Profile и следуйте инструкциям. Далее можно переходить ко второму шагу очистки. Вам будет предложено настроить несколько параметров шумоподавления. Подбираются они экспериментальным путем. Пробуйте разные значения, нажимайте кнопку Preview, слушайте и ищите оптимальные настройки. Когда результат очистки будет вас устраивать, нажимайте клавишу OK. Готово.

    Уточню, для понятливых:)), «запаситесь несколькими секундами тишины» значит — выделите какой-то "пустой"участок без слов и музыки (но с типичными шумами).

    А потом уже в меню Эффекты жмите Noise Removal (Удаление шума...), и там жмите Get Noise Profile (Создать модель шума). Окошко пока закроется.

    Затем надо снять выделение (либо выделить всё), а не то только выделенный участочек с шумом обнулится((-:

    И теперь повторно в меню Эффекты жмите Удаление шума..., а там уже ставьте нужные параметры и "OK"...

    http://liberatum.ru/exclusive/audacity-noise-removal

    Создаем свой персональный сайт на Github.

    $
    0
    0

    Mало кто знает, что Githubкроме превосходного хостинга ваших Gitпроектов
    может также хоститьваш персональный сайт.
    Например на нем расположен этот блог. В своей первой статье я
    расскажу как максимально удобно настроить эту функциональность.


    Введение


    Для начала вам нужно быть зарегистрированным пользователем Githubи уметь
    работать с системой контроля версий Git. Предположим вы готовы.



  • Первое, что вам потребуется — это создать на Githubрепозиторий с именем вида: username.github.com, где usernameваш логин на сервисе. Например для этого блога создан репозиторий http://github.com/klen/klen.github.com

  • Вторым шагом мы создадим локальный репозиторий и привяжем его к удаленному:

  • В дальнейшем я буду приводить примеры для своего сайта: klen.github.com



    Отлично, ваш статический сайт уже готов! В течении 10 минут он появится по адресу:

    username.github.com.
    В дальнейшем он будет обновляться при коммитах в удаленный репозиторий.

    Использование генераторов статических сайтов


    Созданный нами сайт не слишком удобен для работы, трудно писать содержание
    используя HTML, сложно поддерживать целостность ссылок. Использовать его
    например как блог очень затруднительно.


    Существует масса проектов генерации статических сайтов и блогов.
    При работе с ними фактически вы пишете страницы и статьи в удобном для вас формате,
    а затем генератор обновляет структуру сайта. По-умолчанию Githubуже поддерживает
    написанный на ruby генератор Jekyll. То есть вам необязательно использовать только
    HTML синтаксис, из коробки вы можете писать в ваш сайт на Markdown. Подробнее читайте
    в документации Github Pagesи Jekyll.


    Я предпочитаю генерировать страницы локально и проверять результат без выгрузки
    содержания на Github. Мне привычнее работать с Pythonпоэтому в качестве генератора
    сайта мной используется Pelican. Ниже я покажу как поставить его и настроить для работы.


    Если вы предпочитаете rubyдальше можете не читать.


    Установка и настройка Pelican


    Предполагается, что вы знакомы с Pythonи VirtualEnv.


  • Так как мы будем использовать Pelicanнам необходимо выключить встроенный в Githubгенератор Jekyll. Это делается добавлением в корень репозитория файла .nojekyll.



  • Теперь создадим и активируем виртуальное окружение для модулей нашего сайта:



  • Установим в созданный нами VirtualEnvгенератор Pelicanи необходимый для него движок шаблонов Jinja2:



  • Мы будем держать исходники сайта в поддиректории source, а созданные статические страницы в корне репозитория, чтобы Githubих видел. Создадим файл source/hello.rstс нашей первой статьей:



  • Я использую синтаксис RST, но вы можете использовать Markdownдля своего сайта. Просто сохраняйте файлы с расширением *.md
    Pelicanподдерживает и другие форматы, но надо ставить соответствующие модули.
  • И соберем статику:



  • Опция -o .заставляет Pelicanпроизводить сборку статики в корне
    проекта.

    Если все прошло успешно в корне проекта вы увидите несколько HTMLфайлов.
    Откройте index.htmlв браузере и посмотрите на ваш сайт.
  • Теперь наши изменения можно сохранить в Gitи отправить на Github.



  • Автоматизация


    Настроим наш сайт и немного автоматизируем рутинные операции.

  • Создадим файл настроек нашего сайта source/settings.py:


  • Подробнее про настройки Pelican, можно прочитать в его документации.


  • Для упрощения сборки создадим sh-файл .compile


  • И дадим ему права на исполнение:



    Теперь в директории проекта можно вызывать ./.compileи собирать статику даже без активации
    виртуального окружения.


  • Следующим шагом создадим Gitхук для автоматической генерации сайта при коммитах. Создадим и отредактируем файл .git/hooks/pre-commit:



  • Не забудьте сделать его исполнемым.

    При каждом коммите изменений в репозиторий, проект будет пересобран автоматически.

    На этом нашу предварительную работу по созданию github-сайта можно считать оконченной. В дальнейшем стоит поподробнее прочитать документацию Pelican,
    модифицировать стандартную или создать собственную тему оформления и подключить какой нибудь сервис комментариев.
    Как нетрудно догадаться исходники этого блога расположены по адресу: http://github.com/klen/klen.github.com

    http://klen.github.io/github-blog.html

    Pelican. Установка блога.

    $
    0
    0

    Подготовка зависимостей


    Для того чтобы сделать блог, нам понадобиться установить генератор статических сайтов (наш блог будет на Pelican), который будет преобразовывать все текстовые записи в Markdownв статичные HTML страницы. Начнем с подготовки и установим все необходимые зависимости:


    #должен быть установлен pip и gitsudoapt-getinstallpython-pipgit-core# после установки необходимо [настроить git](http://webquant.ru/posts/git/)#устанавливаем Pelican и Markdownsudopipinstallpelicanmarkdown#обновляем pelican до dev версии с github'asudopipinstallgit+https://github.com/getpelican/pelican#egg=pelican --upgrade


    Базовая настройка блога pelican


    sudopelican-quickstart#Ответы на вопросы


    Установка новой темы


    # переходим в папку с темамиcd/usr/local/lib/python2.7/dist-packages/pelican/themes/# копируем одну из тем из  gitclonehttps://github.com/DandyDev/pelican-bootstrap3.git# смотрим путь до нашей темы pelican-themes-l-v# устанавливаем тему для сайта# добавляем переменную THEME=/path/to/my_theme в pelicanconf.py


    Создание первого поста в нашем блоге (Pelican)


    После настройки проекта создадим первый пост в папке content. Для этого необходимо создать новый файл с расширением *.md (Markdown) следующего содержания:


    Title:Pelican.Установкаблога.Date:2014-10-2711:59Category:webTags:тегиSlug:pelicanAuthor:adminSummary:ПошаговаяинструкцияпоустановкиблоганаPelicanМойпервыйпостдляблоганаPelican.


    Редактирование статьи


    Запустим devserverдля редактирования статьи и автоматического обновления сайта в реальном времени:


    #запускаем в терминале сервер для генерирования статичных страниц нашего сайтаcdmyblog_folder#переходимвпапкусозданногоблогаmakedevserver#запуск./develop_server.shstop#остановка


    после запуска локального сервера, можно зайти в браузер и посмотреть его по адресу
    http://localhost:8000/


    Перенос блога на сервер github


    Гитхаб известен тем, что имеет встроенный генератор статических сайтови к тому же полностью бесплатен, поэтому грех не воспользоваться этим и не установить на его сервере наш блог.


    1. Подготовка


    • Необходимо ответить "Yes"при создании блога quickstart

    • Нужно иметь аккаунт на github

    • Должен быть настроен git


    2. Создаем репозиторий на github: username.github.io

    3. Копируем проект с гитхаба на свой компьютер в папку output своего блога

    gitclonegit@github.com:achicha/achicha.github.io~/myblog_folder/output


    4. работа с git

    #переходим в папку, где находяться сгенерированные файлыcd~/myblog_folder/output# инициализируем гитgitinit# добавляем все файлы в локальный проект нашего блогаgitadd-A# узнаем какие файлы добавлены в проект и в какой ветке (master/slave) работаемgitstatus# добавляем коммитgitcommit-a-mCommitdescription# отправляем измененные файлы на серверgitpushorigin


    Настраиваем свое доменное имя


    После создания своего блога и запуск его на сервере гитхаба, мне захотелось сделать для него свой домен. Для этого я зарегестрировал доменное имя и иземенил настройки CNAME для сревера:



    1. Создаем файл с именем CNAME (пустой, без какого-либо расширения) в папке output

    2. Добавляем в него запись своего домена без www, например : mydomain.com

    3. Добавляем его на github. Должен измениться домен в username/username.github.io -> settings(снизу в правой боковой колонке) -> github Pages -> your site is published at "your domain"

    4. Прописываем "А"запись c IP адресом GitHub'aв DNS настройкиу своего провайдера/хостера.

    5. Не забыть "А"запись для переадрисации зеркала с "www"


    Если не понятно, читаем описание c github


    Базовая установка блога, используя генератор статических сайтов Pelican и перенос его на сервер гитхаба, закончена. Далее расширенные настройки Pelican, которые так же очень важны, но не поместились в одну статью.


    http://webquant.ru/posts/pelican/


    Pelican. Расширенные настройки блога.

    $
    0
    0

    Начало читаем в предыдущей статье как установить Pelican.


    Чтобы было полегче с настройками, необходимо выбрать хорошую тему, в которой предустановлено большинство нужных вещей, а потом уже допиливать её по необходимости :)


    Все изменения вносятся в основной файл настроек pelicanconf.py


    Структуризация файлов.


    Для обеспечения порядка в файлах, складываем все посты в отдельную папку. Так же уберем .html для отображения более красивых ссылок.


    OUTPUT_PATH='output/articles/'ARTICLE_URL='articles/{slug}'ARTICLE_SAVE_AS='articles/{slug}/index.html'


    Установка дополнительных плагинов


    Disqus - Добавляем коментарии к постам


    #нужно установить плагин и настроитьDISQUS_SITENAME='Yourwebsite'sshortname'DISQUS_NO_ID=True


    Pygments - для подсветки кода в блоках.


    #устанавливаем pygments и настраиваем, если не установлено по дефолтуPYGMENTS_STYLE='zenburn'


    Related Posts


    В моей теме уже он настроен автоматически, необходимо только скачать сам плагин (по аналогии с sitemap ниже)


    Sitemap


    XML карта сайта. Для улучшения индексации сайта в поисковиках.


    1) скачиваем плагин
    sitemap


    2) устанавливаем в любую папку блога, например plugins


    gitsubmoduleaddhttps://github.com/getpelican/pelican-pluginsgitsubmoduleupdate--init


    3) прописываем настройки:


    # PluginsPLUGIN_PATH="plugins"PLUGINS=["sitemap",]# SitemapSITEMAP={'format':'xml','priorities':{'articles':0.5,'indexes':0.5,'pages':0.5},'changefreqs':{'articles':'monthly','indexes':'daily','pages':'monthly'}}


    4) читаем мануал по настройкам, если необходима произвольная настройка.


    Немного о SEO


    BREADCRUMBS


    Или хлебные крошки - для улучшения навигации по сайту.


    DISPLAY_BREADCRUMBS=TrueDISPLAY_CATEGORY_IN_BREADCRUMBS=True


    Favicon - иконка для сайта.


    Копируем картинку .png или .ico в наш проект и указываем путь


    FAVICON='images/favicon.ico'


    Robots.txt


    Для лучшей индексации сайта роботами, так же можно запретить индекс различный файлов.
    Необходимо создать robots.txt в корне папки output и прописать необходимые настройки для блога:


    User-agent:YandexDisallow:/content/User-agent:*Disallow:/content/Sitemap:http://site_name/sitemap.xmlHost:site_name


    Облако тегов


    Если нужно, то включаем облако тегов в sidebar.


    # отображение теговDISPLAY_TAGS_ON_SIDEBAR=True# показывать в облаке или спискомDISPLAY_TAGS_INLINE=True


    Отключаем индексирование страниц и предложений в тексте


    Для отключение страниц нужно в шаблонной странице tag.htmlвставить метатег в код:


    <metaname="robots"content="noindex"/>


    А если Вам необходимо исключить из индексирования какую-либо фразу:


    <noindex>Это предложение не видно Яндексу</noindex>


    Static paths


    Некоторые файлы не нужно генерировать, а необходимо просто перенести в наш блог, для этого настроим статичную папку.
    Создаем папку /content/extraи кладем туда файлы, которые необходимо скопировать.
    А так же добавить в pelicanconf.pyстроки:


    STATIC_PATHS=['extra/robots.txt','images','extra/favicon.ico','extra/CNAME']EXTRA_PATH_METADATA={'extra/robots.txt':{'path':'robots.txt'},'extra/favicon.ico':{'path':'favicon.ico'},'extra/CNAME':{'path':'CNAME'},}


    404 error


    нужно сгенерировать страницу с названием 404.html и положить в корневую папку сайта


    Google+


    Синхронизируем свой сайт с гугл+:


    Социальные закладки


    SOCIAL=(('github','http://github.com/achicha'),('myblog','http://webquant.ru'),)


    Аналитика


    Для анализа нашего блога, настроим сбор аналитики на сайте.


    Google Analytics


    1) Устанавливаем код аналитики в шаблон и добавляем запись


    GOOGLE_ANALYTICS='UA-******your_code'GOOGLE_ANALYTICS_DOMAIN='http://webquant.ru/'


    2) Добавляем сайт в google analyticsи webmaster


    3) добавляем в вебмастере sitemap


    4) проверяем robots.txt на наличие ошибок


    Яндекс Метрика


    1) Добавляем счетчик метрикиво вкладке общие.


    2) Дальше во вкладке Код счетчиканажимаем галку Вебвизори копируем код ниже.


    3) Устанавливаем код аналитики в шаблон:


    Самый простой (но не самый правильный) способ установить метрику, редактировать файл с счетчиком Google Analytics pelican-bootstrap3/templates/ga.html


    <!--EndGoogleAnalyticsCode-->#тут вставляем код Яндекс Метрики, который скопировали.{%endif%}


    4) сообщаем о новом сайте в Яндекс Вебмастере


    5) добавляем сайтв Вебмастер, я делал через проверку txt файлом.


    6) нужно добавить на сайте sitemap, главное зеркало.


    И через пару недель Ваш сайт будет корректно отображаться в Я.Вебмастере :) по сравнению с гуглом, где добавляется в течении нескольких дней, нужно запастись терпением.


    Дочерний шаблон


    мануал тут


    Но я пока ограничился редактированием template файлов (html) для вставки нужных элементов кода, пример вставки Яндекс метрики можно посмотреть выше.
    Только нужно помнить, что при таком подходе, после обновления основной темы, все Ваши надстройки пропадут.


    Полезные ссылки




    http://webquant.ru/posts/pelican-extra/

    Удаление старых ядер ( linux-kernel ) одной командой

    $
    0
    0

    Тем, кому нужно срочно, вот, эта команда:

    dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge


    Разбор команды


    dpkg -l 'linux-*'выбрать все установленные пакеты, которые начинаются с ‘linux-‘.

    sed '/^ii/!d;удалить из списка все строки, которые начинаются с чего-то отличного от ii.

    uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/"получить текущую версию ядра.

    /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/dудалить все строки за исключением той, в которой содержится текущая версия ядра.

    s/^[^ ]* [^ ]* \([^ ]*\).*/\1/в каждой строке оставить только название пакета

    /[0-9]/!dудалить строки, которые не содержат цифры.

    xargs sudo apt-get -y purgeполностью удалить эти пакеты.


    Предупреждения



    1. Если до выполнения этой команды вы обновили ядро или систему — перезагрузите компьютер!

    2. Лучше в начале выполнить команду без xargs sudo apt-get -y purgeи посмотреть что будет удалено!


    Источники:

    Can’t upgrade due to low disk space on /boot

    Ubuntu Cleanup: How to Remove All Unused Linux Kernel Headers, Images and Modules


    http://meandubuntu.ru/2014/05/удаление-старых-ядер-linux-kernel-1-командой/

    Установка Microsoft Office 2010 на Linux

    $
    0
    0

    Очень многих удерживает от перехода на Linux невозможность работать в профессиональных приложениях, которые написаны только под Windows. До недавнего времени, к таким приложениям относился и Microsoft Office 2010. Теперь ситуация кардинально изменилась. В настоящее время возможно:




    • устанавливать Microsoft Office 2010 на Linux (без особых трудностей, буквально в несколько кликов, нет необходимости самому скачивать какие-то дополнительные библиотеки,сам процесс установки стал намного надёжнее и практически всегда ведёт к положительному результату);


    • можно ассоциировать расширения файлов офисного пакета Microsoft с установленным офисом. Т.е., например, на нашей Linux машине файлы .doc и .docx будут открываться  Microsoft Word 2010;


    • достигнута стабильная и надёжная работа  Microsoft Office 2010 на Linux — без сбоев и глюков.



     



    Всё сказанное в равной степени относится как к Microsoft Office 2010, так и к  Microsoft Office 2007,  Microsoft Office 2003.



    Заманчиво звучит, не правда ли? Я скажу больше, установить Microsoft Office 2010 на Linux стало легче, чем установить тот же самый LibreOffice!



    Итак, приступим, наконец. Нам нужна программа PlayOnLinux, версия не ниже 4.1. В репозитории Mint, на момент написания статьи, была версия 4.0, которая не удовлетворяет необходимым требованиям.



    Идём на официальный сайт PlayOnLinux в раздел загрузкаи скачиваем версию, подходящую для нашего Linux



     





     


    Кстати, пользователи Mint, должны скачивать версию для Ubuntu.


     


    Выставляем скаченному файлу права на выполнение.


     





     


    Открываем файл для установки, появляется вот такое предупредительное окно.


     





     


    Закрываем его, нажимаем «Установить пакет».


     





     


    Для этой программы являются зависимыми пакеты Wine'а, поэтому происходит загрузка и установка необходимых пакетов — терпеливо ждём.


     





     


    Если всё прошло удачно, в разделе игры у нас появляется  PlayOnLinux. Открываем его.


     





     


    Нажимаем кнопку «Установка» и внизу окна обязательно нажимаем кнопку «Обновить» — произойдёт обновление скриптов — это очень важно для первого запуска:


     





     


    Начался процесс обновления — опять ждём:


     





     


    Итак, выбираем пункт «Офис», в нём выбираем  Microsoft Office 2010 (или любой другой, кстати), нажимаем кнопку «Установка».


     


    Появляется приветственное окно, просто нажимаем «Далее»:


     





     


    Создаётся виртуальный диск для нашего офиса:


     





     


    Чуть не забыл, если у вас офис записан на диск, то диск уже должен быть к этому моменту в dvd-rom'е. Если же у вас установочные файлы офиса расположены на жёстком диске (как и у меня), то выбирайте пункт «Другие» и указывайте каталог с дистрибьютивом.


     





     





     


    В наш виртуальный диск устанавливаются необходимые компоненты:


     





     





     





     






     



    После того, как всё нужное скачено и установлено, появляется обычный установщик офиса. Запомните: дефолтные каталоги не менять, кнопку «отмена» не нажимать — программа может задуматься на некоторое время, это нормально, она делает свои внутренние операции.



     







     





     





     


    Всё готово, нажимаем кнопку «Закрыть».


     





     


    У нас осталось вот такое окно и кажется, что всё готово, а это окошко просто зависло и хочется нажать кнопку «Отмена» или закрыть его — не надо этого делать, программа размещает ярлыки, прописывает ассоциации файлов и т. п.. Просто ждите. Нажимаем «Далее», окошко закрывается.


     





     


    В главном окне PlayOnLinux видим примерно следующее:


     





     


    Пробуем запустить, например Word. Программа спрашивает наши данные:


     





     


    Предлагает выбрать настройки — абсолютно фиолетово, что вы выберете, автоматически офис обновляться не будет. Всё работает, можно пользоваться:


     





     


    Перейдём к ассоциации файлов с нашим офисным пакетом. Для этого в главном окне  PlayOnLinux выбираем «Настройки» → «File Associations». У вас будет несколько другой перечень — я свои случайно стёр и мне пришлось вбивать их вручную:


     





     


    Теперь выбираем любой вордовский файл и кликаем по нему правой кнопкой, выбираем «Открыть в программе», «Другое приложение». Выбираем из списка PlayOnLinux, либо, если его там нет, нажимаем «Использовать собственную команду» и копируем туда


     


    playonlinux


     


    Ставим галочку на пункте «Запомнить это приложение для файлов типа…»:


     





     


    Нажимаем "Открыть"и… ничего не происходит. Неужели разработчики обманули нас?


     


    Я предположил, что у программы проблема с русскими буквами в названии файла (бывает такое, знаете ли). Я назвал файл латиницей, двойной клик и… вуаля:


     





     


    Итог: мы имеем самый настоящий, полностью работоспособный Microsoft Office 2010 на Linux. Единственной ложкой дёгтя в этой бочке мёда стала проблема с файлами, в названии которых присутствуют русские буквы — они не открываются Microsoft Office'ом при клике на них. Думаю, очень скоро эта проблема будет исправлена, и тогда всё станет просто идеально.


     



    UPD: проблема открытия файлов в названии которых есть русские буквы решилась очень быстро. Начиная с версии PlayOnLinux 4.1.4 всё стало впорядке. На текущий момент, эту версию можно взять отсюда http://beta.playonlinux.com



    Всё получилось? Отлично! Переходим к следующей статье "Как активировать Microsoft Office 2010 на Linux".


    http://webware.biz/?p=174

    Как активировать Microsoft Office 2010 на Linux

    $
    0
    0

    О том, как установить Microsoft Office 2010 на Linux WebWare.biz уже писал здесь. В этой подробной инструкции подробно расписана вся эта простая процедура. Microsoft Office 2010 отлично работает на Linux — никаких нареканий.



    Но некоторые пользователи испытывают проблемы с его активацией. Это сделать (активировать) довольно просто, но нужно знать КАК это сделать. Я покажу на примере Microsoft Toolkit 2.5.2 Official.



    Откройте в PlayOnLinuxваш список виртуальных дисков. Мой диск называется test:



    01



    Выберете вкладку«Установка компонентов»:



    02



    Найдите пункт dotnet40и нажмите Установка (таким образом, в наш виртуальный диск мы дополнительно установим Microsoft .NET Framework 4— это нужно для работы файла Microsoft Toolkit.exe):



    03



    Дожидаемся окончания скачивания/установки/настройки.



    Нам нужно скопировать файл Microsoft Toolkit.exeв наш виртуальный диск. Найдите каталог (любым файловым менеджером) ~/PlayOnLinux's virtual drives/нужная_виртуальная_машина/drive_c/. Т.е. в вашей домашней папке ищите PlayOnLinux's virtual drives/, в этом каталоге ищите папку с названием вашего виртуального диска (у меня — test) и далее внутри этой папке перехоодите по пути /drive_c/



    Моя домашняя папка — mial, следовательно, полный путь в моём случае /home/mial/PlayOnLinux's virtual drives/test/drive_c/



    И сюда копируем файл Microsoft Toolkit.exe.



    07



    Теперь переходим во вкладку Разное:



    04



    И выберете «Выполнить .exe файл на этом виртуальном диске». В открывшемся окне ищите каталог ~/PlayOnLinux's virtual drives/нужная_виртуальная_машина/drive_c/windows/. Т.е. в вашей домашней папке ищите PlayOnLinux's virtual drives/, в этом каталоге ищите папку с названием вашего виртуального диска (у меня — test) и далее внутри этой папке перехоодите по пути /drive_c/windows/



    Моя домашняя папка — mial, следовательно, полный путь в моём случае /home/mial/PlayOnLinux's virtual drives/test/drive_c/windows/



    05



    Находите там файл explorer.exeи нажимаете Открыть:



    06



    Теперь уже в левой стороне нового окна переходите «Рабочий стол» → «Мой компьютер» → “C”:



    08



    В это окне двойным кликом запускаем наш файл для активации Microsoft Toolkit.exe:



    09



    Если вы уже устанавливали Microsoft Office на Windows, то вы уже знаете, что это такой и что нужно делать. Нажмите на иконку офиса — программа выдаст сообщение об ошибке, но на работоспособность этой программы это не скажется, просто нажмите Continue:



    10



    Я для себя, например, установил KMS Server Service – вы можете проделать другие обычные процедуры:



    11


    http://webware.biz/?p=1881

    Как УЗНАТЬ пароль Windows?

    $
    0
    0

    В этой статье будет описано как узнать пароль от Windows (любых версий), НЕ сбросить, НЕ изменить, а именно УЗНАТЬ.



    Сначала отступление



    Сбросить пароль или изменить его в системе Windows легко — школьники уже наснимали свои стопятьсот видео как это сделать.



    Продвинутые школьники используют ПРО версию программы ElcomSoft System Recovery, которая «за пол минуты взламывает пароль» (на самом деле, ищет по словарю наиболее популярные пароли, сравнивает их с ранее рассчитанными хэшами и, если школьник задалпароль что-нибудь вроде «1», «1111», «123», «admin», «password», то программа его отображает).



    Продвинутые пользователи снимают видео как сбросить пароль с помощью Kali Linux. Причём, Kali Linux используется для 1) монтирования диска с ОС Windows, 2) переименование одного файла для запуска командной строки… Я думаю, в свободное время эти люди колют орехи айфонами.



    На самом деле, я шучу. В 99.99% случаев именно это и нужно — сбросить пароль школьника или бухгалтера, которые зачем-то его поставили и благополучно забыли.



    Если вам именно это и нужно, то загрузитесь с любого Live-диска (это может быть и Linux – что угодно). В каталоге C:\Windows\System32\переименуйте файл cmd.exeв sethc.exeили в osk.exe. Понятно, что нужно сделать бэкап файла sethc.exe (или osk.exe), а файл cmd.exe копировать с присвоением нового имени.



    Если вы переименовали файл в sethc.exe, то при следующей загрузке Windows, когда у вас спросят пароль, нажмите пять раз кнопку SHIFT, а если в osk.exe, то вызовите экранную клавиатуру. И в том и в другом случае у вас откроется командная строка (cmd.exe) в которой нужно набрать:




    net user имя_пользователя *




    Т.е. если имя пользователя admin, то нужно набрать:




    net user admin *




    А теперь я буду снимать своё видео.



    Опять шучу.



     



    Узнаём пароль Windows с помощью Kali Linux



    Теория: где Windows хранит свои пароли?



    Windows размещает пароли в файле реестра SAM (System Account Management) (система управления аккаунтами). За исключением тех случаев, когда используется Active Directoryis. Active Directoryis — это отдельная система аутентификации, которая размещает пароли в базе данных LDAP. Файл SAM лежит в C:\<systemroot>\System32\config\ (C:\<systemroot>\sys32\config\).



    Файл SAM хранит пароли в виде хэшей, используя хэши LM и NTLM, чтобы добавить безопасности защищаемому файлу.




    Отсюда важное замечание: получение пароля носит вероятностный характре. Если удасться расшифровать хэш — то пароль наш, а если нет — то нет…




    Файл SAM не может быть перемещён или скопирован когда Windows запущена. Файл SAM может быть сдамплен (получен дамп), полученные из него хэши паролей могут быть подвержены брут-форсингу для взлома оффлайн. Хакер также может получить файл SAM загрузившись с другой ОС и смонтировав C:\. Загрузиться можно с дистрибутива Linux, например Kali, или загрузиться с Live-диска.



    Одно общее место для поиска файла SAM это C:\<systemroot>\repair. По умолчанию создаётся бэкап файла SAM и обычно он не удаляется системным администратором. Бэкап этого файла не защищён, но сжат, это означает, что вам нужно его разархивировать, чтобы получить файл с хэшами. Для этого можно использовать утилиту expand. Команда имеет вид Expand [FILE] [DESTINATION]. Здесь пример раскрытия файла SAM в файл с именем uncompressedSAM.




    C:\> expand SAM uncompressedSAM




    Чтобы улучшить защиту от оффлайн хакинга, Microsoft Windows 2000 и более поздние версии включают утилиту SYSKEY. Утилита SYSKEY зашифровывает хэшированные пароли в файле SAM используя 128-битный ключ шифрования, который разный для каждой установленной Windows.



    Атакующий с физическим доступом к системе Windows может получить SYSKEY (также называймый загрузочный ключ) используя следующие шаги:




    1. Загрузиться с другой ОС (например, с Kali).


    2. Украсть SAM и хайвы SYSTEM (C:\<systemroot>\System32\config\ (C:\<systemroot>\sys32\config\)).


    3. Восстановить загрузочный ключ из хайвов SYSTEM используя bkregили bkhive.


    4. Сделать дамп хэшей паролей.


    5. Взломать их оффлан используя инструмент, например такой как John the Ripper.



    Ещё одно важное замечание. При каждом доступе к файлам в Windows изменяется MAC (модификация, доступ и изменение), который залогирует ваше присутствие. Чтобы избежать оставления криминалистических доказательств, рекомендуется скопировать целевую систему (сделать образ диска) до запуска атак.



    Монтирование Windows



    Есть доступные инструменты для захвата Windows-файлов SAM и файла ключей SYSKEY. Один из методов захвата этих файлов — это монтирование целевой Windows системы так, чтобы другие инструменты имели доступ к этим файлам в то время, пока Microsoft Windows не запущена.



    Первый шаг — это использование команды fdisk -l для идентификации ваших разделов. Вы должны идентифицировать Windows и тип раздела. Вывод fdisk показывает NTFS раздел, например так:




    Device Boot Start End Blocks Id System



    /dev/hdb1* 1 2432 19535008+ 86 NTFS



    /dev/hdb2 2433 2554 979965 82 Linux swap/Solaris



    /dev/hdb3 2555 6202 29302560 83 Linux




    Создаёте точку монтирования используя следующую команду mkdir /mnt/windows.



    Монтируете системный раздел Windows используя команду как показано в следующем примере:




    mount -t <WindowsType> <Windows partition> /mnt/windows




    01



    Теперь, когда целевая система Windows смонтирована, вы можете скопировать файлы SAM и SYSTEM в вашу директорию для атаки следующей командой:




    cp SAM SYSTEM /pentest/passwords/AttackDirectory




    Доступны инструменты для дампа файла SAM. PwDumpand Cain, Abelи samdump— это только немногие примеры.



    Обратите внимание, вам нужно восстановить оба файла — загрузочного ключа и SAM. Файл загрузочного ключа используется для доступа к файлу SAM. Инструменты, используемые для доступа к файлу SAM будут требовать файл загрузочного ключа.



    bkregи bkhiveare— популярные инструменты, которые помогут получить файл загрузчика ключа, как показано на следующем скриншоте:



    02



    Как защититься от кражи пароля для входа в Windows:




    • Во-первых, не нужно надеяться на этот пароль. Этот пароль не спасёт вас даже от вашего сына-школьника. Этот пароль не поможет вам защитить данные, а также бесполезен при краже компьютера. (Ситуация с паролем на BIOS примерно такая же — не предоставляет никакой реальной защиты, время от времени портит жизнь бухгалтерам и людям с плохой памятью).


    • Если вам важно ограничить доступ к данным или ко всей системе, используйте такие программы шифрования как VeraCryptи TrueCrypt (но если уж вы в этом случае забудете пароль, то данные будут безвозвратно утеряны).


    • Чтобы ваш пароль на вход в Windows не могли расшифровать школьники, придумывайте сложный, длинный пароль с разными регистрами, цифрами и буквами (в том числе русскими) и т. д. Но ещё раз повторю — этот пароль не защищает ничего.

    http://webware.biz/?p=1757

    Viewing all 435 articles
    Browse latest View live