Как программировать в командной строке. Открытые коды Windows: сила закона

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

Использование нескольких команд и символов условной обработки

Можно выполнять несколько команд из одной командной строки или сценария с помощью сиволов условной обработки. При использовании нескольких команд, содержащих символы условной обработки, выполнение команд, стоящих справа от символа условной обработки, будет проводиться в зависимости от результатов выполнения команды, стоящей слева от символа. Например, требуется, чтобы команда выполнялась, только если предыдущая команда не была выполнена успешно. Или требуется, чтобы команда выполнялась, только если предыдущая команда была выполнена успешно.

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

Символ Синтаксис Определение
& [...] команда1 & команда2 Используется для разделения нескольких команд в одной командной строке. В Cmd.exe выполняется первая команда, затем вторая команда.
&& [...] команда1 && команда2 && , только если команда, стоящая перед этим символом была выполнена успешно. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.
|| [...] команда1 || команда2 Запускает команду, стоящую за символом || , только если команда, стоящая перед символом || не была выполнена. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
() [...] (команда1 & команда2 ) Используется для группировки или вложения команд.
; или , команда1 параметр1 ; параметр2 Используется для разделения параметров команды.

Примечания

  • Амперсанд (&), вертикальная черта (|) и скобки () являются специальными символами, которым должен предшествовать управляющий символ (^) или кавычки, если эти символы передаются в качестве аргументов.
  • Если команда завершает операцию успешно, возвращается нулевой (0) код ошибки или не возвращается никакого кода.

Вложенные командные оболочки

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

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

Появится сообщение следующего вида:

Microsoft (R) Windows XP (TM)
(C) Copyright 1985-2001 Microsoft Corp.

Чтобы закрыть все вложенные командные оболочки, введите команду exit .

Можно еще уже локализовать изменения в экземпляре Cmd.exe (или в сценарии) с помощью команд setlocal и endlocal . Команда setlocal создает локальную область, аendlocal ее удаляет. Любые изменения, сделанные внутри области, созданной командами setlocal и endlocal , не учитываются; таким образом исходная среда остается без изменений. С помощью этих команд можно создать до 32 вложенных областей.

Использование переменных среды в Cmd.exe

Среда командной оболочки Cmd.exe определяется переменными, задающими поведение командной оболочки и операционной системы. Имеется возможность определить поведение среды командной оболочки или среды всей операционной системы с помощью двух типов переменных среды: системных и локальных. Системные переменные среды определяют поведение глобальной среды операционной системы. Локальные переменные среды определяют поведение среды в данном экземпляре Cmd.exe.

Системные переменные среды заданы заранее в операционной системе и доступны для всех процессов Windows XP. Только пользователи с привилегиями администратора могут изменять эти переменные. Эти переменные наиболее часто используются в сценариях входа в систему.

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

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

  1. Встроенные системные переменные
  2. Системные переменные куста HKEY_LOCAL_MACHINE
  3. Локальные переменные куста HKEY_CURRENT_USER
  4. Все переменные среды и пути указаны в файле Autoexec.bat.
  5. Все переменные среды и пути указаны в сценарии входа в систему (если он имеется).
  6. Переменные, используемые интерактивно в сценарии или пакетном файле

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

В следующей таблице приведен список системных и локальных переменных.

Переменная Тип Описание
%ALLUSERSPROFILE% Локальная Возвращает размещение профиля «All Users».
%APPDATA% Локальная Возвращает используемое по умолчанию размещение данных приложений.
%CD% Локальная Возвращает путь к текущей папке.
%CMDCMDLINE% Локальная Возвращает строку команд, с помощью которой был запущен данный экземпляр Cmd.exe.
%CMDEXTVERSION% Системная Возвращает номер версии текущих расширений обработчика команд.
%COMPUTERNAME% Системная Возвращает имя компьютера.
%COMSPEC% Системная Возвращает путь к исполняемой командной оболочке.
%DATE% Системная Возвращает текущие данные. Использует тот же формат, что и команда date /t
%ERRORLEVEL% Системная Возвращает код ошибки последней использовавшейся команды. Значение, не равное нуля, обычно указывает на наличие ошибки.
%HOMEDRIVE% Системная Возвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%HOMEPATH% Системная Возвращает полный путь к основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%HOMESHARE% Системная Возвращает сетевой путь к общему основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%LOGONSEVER% Локальная Возвращает имя контроллера домена, который проверял подлинность текущей сессии.
%NUMBER_OF_PROCESSORS% Системная Задает количество процессоров, установленных на компьютере.
%OS% Системная Возвращает имя операционной системы. При использовании Windows 2000 имя операционной системы отображается как Windows_NT.
%PATH% Системная Указывает путь поиска для исполняемых файлов.
%PATHEXT% Системная Возвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые.
%PROCESSOR_ARCHITECTURE% Системная Возвращает архитектуру процессора. Значения: x86, IA64.
%PROCESSOR_IDENTFIER% Системная Возвращает описание процессора.
%PROCESSOR_LEVEL% Системная Возвращает номер модели процессора, установленного на компьютере.
%PROCESSOR_REVISION% Системная Возвращает номер модификации процессора.
%PROMPT% Локальная Возвращает параметры командной строки для текущего интерпретатора. Создается командой Cmd.exe.
%RANDOM% Системная Возвращает произвольное десятичное число от 0 до 32767. Создается командой Cmd.exe.
%SYSTEMDRIVE% Системная Возвращает имя диска, содержащего корневой каталог Windows (т. е. системный каталог).
%SYSTEMROOT% Системная Возвращает размещение системного каталога Windows XP.
%TEMP% и %TMP% Системная и пользо-
вательская
Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие переменную TMP.
%TIME% Системная Возвращает текущее время. Использует тот же формат, что и команда time /t . Создается командой Cmd.exe.
%USERDOMAIN% Локальная Возвращает имя домена, содержащего список учетных записей пользователей.
%USERNAME% Локальная Возвращает имя пользователя, выполнившего вход в систему.
%USERPROFILE% Локальная Возвращает размещение профиля для текущего пользователя.
%WINDIR% Системная Возвращает размещение каталога операционной системы.

Установка переменных среды

Используйте команду set для создания, удаления или отображения переменных среды. Команда set изменяет переменные только в среде текущей оболочки.

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

set имя_переменной

Чтобы добавить переменную, в командной строке введите:

set variablename= значение

Чтобы удалить переменную, в командной строке введите:

set имя_переменной =

Имеется возможность использовать большинство символов в качестве значений переменных, в том числе пробел. При использовании специальных символов, таких как <, >, &, или ^, перед ними следует помещать управляющий символ (^) или кавычки. При использовании кавычек они включаются в значение переменной, так как все символы, следующие после знака равенства принимаются за значение переменной. Учтите следующие примеры.

  • new&name ,введите:

    set varname=new^&name

  • Чтобы создать значение переменной "new&name" ,введите:

    set varname="new&name"

  • При вводе в командной строке set varname=new&name появляется следующее сообщение об ошибке: ""name" is not recognized as an internal or external command, operable program or batch file."

В именах переменных регистр символов не учитывается. Однако, команда set отображает значение переменной так, как оно было введено. Можно комбинировать символы нижнего и верхнего регистра в именах переменных, чтобы облегчить восприятие кода (например, ИмяПользователя).

Примечания

  • Максимальный размер отдельной переменной среды составляет 8192 байта.
  • Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.

Подстановка значений в переменные среды

Чтобы иметь возможность подставлять значения в переменную среды из командной строки или из сценариев, следует заключить имя соответствующей переменной в символы процентов (% имя_переменной % ). Символы процентов указывают на то, что Cmd.exe должен обратиться к значениям переменных, а не делать посимвольное сравнение. После определения значения для имени переменной, заключите имя переменной в символы процентов. Cmd.exe проводит поиск всех вхождений имени переменной и заменяет его на определенное значение переменной. Например, требуется создать сценарий, содержащий различные значения (например, имена пользователей), и требуется определить соответствующее значение переменной среды USERNAME для каждого пользователя. Для этого следует написать сценарий с использованием переменной USERNAME, заключенной в кавычки. При выполнении сценария Cmd.exe заменит вхождения %USERNAME% соответствующими значениями, что избавит от необходимости делать это вручную для каждого пользователя. Подстановка значений не является рекурсивной. Cmd.exe проверяет переменные один раз. Дополнительные сведения о подстановке значений в переменные смотри в разделах

The monster must die

Я не отношу себя к специалистам IT-сферы, ортодоксальным пользователям
интернета или сумасшедшим геймерам, однако у меня есть компьютер, я работаю с
определённым программным обеспечением и слежу за компьютерно-информационной
ситуацией в мире. В первую очередь из-за того, что мы живём в post/информационном,
глобализированном мире, где компьютеры управляют атомными станциями, военными
объектами стратегического назначения, и, да простят меня закоренелые
славянофилы, мышлением большинства населения. Влияние на высокотехнологичную
сферу post/общества определяет влияние на человечество в целом. Особенно, если
это влияние оказывает монополист.

Монополия на операционные системы, а если выражаться без техномонокультурных
вульгарностей, монополия на удачные имитации искусственного интеллекта, приводит
к определённой политической нестабильности. Научные фантасты, прореки нашего
времени, неоднократно предсказывали будущее, в котором крупные корпорации
наделялись политическими полномочиями. Что ж, когда некоторая система
взаимодействует с большинством разумных пользователей, и при этом принадлежит
(подчиняется) узкому кругу лиц, мы можем прогнозировать различные варианты
развития событий. У нас даже имеется возможность опираться на реальный прототип,
если брать за основу корпорацию Microsoft. Небезызвестное детище Пола Алена и
Билла Гейтса отбивается от обвинений в монополизме с далёкого 1990-го года.
Тогда Федеральная комиссия по торговле США (Federal Trade Commission) устроила
проверку на предмет возможного сговора между Microsoft и IBM. Расследование
заглохло, однако в 1993 году маркетинговой политикой Microsoft, связанной с
распространением DOS, заинтересовалось Министерство юстиции США. В 1994 году
между Microsoft и Министерством юстиции заключается полюбовное соглашение, по
условиям которого Microsoft запрещается использовать своё уже тогда доминирующее
положение на рынке для подавления конкурентов. На следующий год Министерство
блокирует планы по слиянию Microsoft и компании Intuit – опять-таки из
антимонопольных соображений. В августе 1997 году Microsoft устраивает донорское
вливание своему конкуренту – Apple Computers - на сумму $150 миллионов. Эти и
некоторые другие действия Microsoft вызывают у Министерства юстиции самые
нехорошие подозрения. Через два месяца Министерство юстиции подаёт иск против
Microsoft с требованием назначить корпорации ежедневный штраф на сумму 1 миллион
долларов за нарушение договорённости от 1994 года. И так далее и так по многу
раз, с переменным успехом Microsoft двигалась к своей нынешней лидирующей
позиции. Последнее антимонопольное разбирательство прошло уже за территорией
США, в Евросоюзе. Специально сформированная комиссия пригрозила штрафом до $3,2
млрд, если Компания не откроет для исследований программный код, а также не
исключит Media Player из комплекта операционной системы Windows. Однако, по
словам представителя Еврокомиссии Тилмана Людера, «Microsoft вряд ли придется
открывать программный код Windows. Компания должна будет лишь предоставить
«протоколы», которые позволят конкурентам создавать совместимые с Windows
программные продукты».

Microsoft же, несколько неоднозначно истолковав решение комиссии ЕС,
предложила открыть исходные коды Windows Server 2003 и предоставить документации
с описанием протоколов под определенными лицензиями, которые, естественно, надо
будет купить. Пока неясно, удовлетворят ли европейских чиновников новые
предложения Microsoft. Представители ЕС уже заявили, что внимательно изучат её
заявления. Однако не исключено, что конфликт ЕС с Microsoft этим не исчерпается,
поскольку американская корпорация и европейские структуры также спорят о цене
лицензий на использование кода Windows. К тому же, авторы иска к Microsoft
считают, что последняя не имеет права брать деньги за лицензии на сетевые
протоколы, поскольку это стандартное программное обеспечение, зашифрованное для
противодействия конкурентам. В самой корпорации, однако, утверждают, что речь
идет об уникальных разработках.

Горшочек с мёдом

Чего, собственно, добиваются все эти «антимонопольные» процессы, помимо,
конечно же, ограничения роста компании? Во-первых, принудить Microsoft выпустить
ограниченную версию Windows, из которой поставщики могли полностью выкинуть
любую прикладную программу, так или иначе «ущемляющую» интересы конкурентов –
всякие мультимедийные утилиты, вроде Windows Media Player или Internet Explorer.
Во-вторых, приказать Microsoft предоставить конкурентам всю необходимую
техническую информацию, с тем, чтобы их софт мог безглючно работать с Windows.
В-третьих, открыть исходники всей операционной системы для тщательного изучения.

Теперь следует более подробно остановиться на открытии исходного кода Windows.
Заглянуть в него очень хотелось бы и конкурентам, и разработчикам из open source
community, и, вполне вероятно, хакерам;). Вот последних в Microsoft, видимо,
убоялись больше всего. Не однократно представители Microsoft заявляли, что
открытость – это как раз не преимущество, что утверждают сторонники Linux, а
страшная опасность: дескать, любой желающий может найти нужную ему дыру, и
использовать её во зло – вирус написать, или взлом устроить. Поэтому лучше
скрывать исходные коды, вместе со всеми их дырами. Напомню, что в сообществе
открытых программ принято инспектировать коды, выявлять ошибки, заявлять о них и
пытаться залатать. Кто во что горазд. Неоднократно высказывались мысли и о том,
что в исходниках Windows наличествуют такие огрехи, что открывать их означает и
впрямь поставить под теоретическую угрозу всех тех, кто пользуется продукцией
Microsoft. Скорее всего Microsoft Windows во всех своих версиях содержит
уязвимость, которую исправить невозможно (по мнению некоторых сторонних
исследователей в разных версиях подобные Абсолютные Ошибки разные). Лечить её
примерно то же самое, как заделывать дыру в середине фундамента, на котором уже
стоит многоэтажный дом. Безусловно Microsoft прекрасно осведомлены насчёт
наличия Абсолютной ошибки, но не считают её уязвимостью. Конечно, ведь исходные
коды пока ещё скрыты от глаз общественности.

Чуть-чуть сбавим обороты и отдадим Компании должное. Она уже несколько лет
предоставляет исходный кода органам власти многих стран, в том числе и
Российской Федерации. Факт обеспечения доступа к исходным кодам Windows очень
важен, поскольку это программное обеспечение служит платформой, на основе
которой построены государственные информационные системы многих стран, а так же
и оборонные системы (а вы думали там повсюду сверхоси на базе Linux? :)).
Соглашения подразумевают не только предоставляет доступ к исходному коду Windows
и другой важной технической информации, но и совместные работы, а также
консультации с целью адаптации операционной системы к требованиям, которые
предъявляются государством к информационным системам, используемым в органах
государственной власти. Предоставление корпорацией Microsoft исходных кодов и
подробной технической документации в рамках инициативы GSP (Government Security
Program) потрясающе гениальный ход по утверждению монополии Microsoft.
Действительно, открытие кодов - исключительно сильный аргумент в споре с активно
наступающими клонами Linux. Причем заявленный переход на Linux ряда
правительственных учреждений в Европе не подкреплен экономическими расчетами.
Конечно, Linux можно настроить точно под нужды конкретного пользователя,
ограничив функциональность системы, но потребность в таком подходе пока низка,
при том, что требует высокой квалификации специалистов, обслуживающих систему. В
случае с Windows открытие кодов успокоит тех, кто убежден, что в операционную
систему встраиваются какие-либо дополнительные шпионские функции, а также
укрепит положение Microsoft на рынке. Кроме того, теоретически появляется
возможность точно такой же тонкой настройки операционной системы под нужды
определенной группы пользователей.

Даже лояльные к Microsoft чиновники понимают, что закрытость исходных кодов и
технической информации делает программы корпорации потенциально опасными для
национальных интересов страны. Кто может гарантировать, что те дыры, которые все
время находят хакеры, не оставлены Microsoft специально, чтобы заглядывать в
компьютеры пользователей? Пусть это не так. Менеджмент Microsoft состоит из
кристально честных людей. Но кто поручится, что под давлением правительственных
структур Соединенных Штатов случайно допущенные ошибки не будут использованы без
ведома других государств на их территории? Не стоит забывать, что идет
масштабная антитеррористическая кампания, а Microsoft обвиняется многими
американскими штатами и правительственными организациями в монополизме и
нечестной конкуренции. В таком положении вряд ли Билл Гейтс будет
последовательно отстаивать права граждан других стран.

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

Охота на код

Несколько лет назад много шума наделал история с кражей и распространением
через интернет исходников 2000 и NT 4.0. Часть кода, появившаяся в интернете,
являлась, по мнению экспертов, первым сервис-паком для Windows 2000 и
датировалась 25 июля 2000 года. Предполагалось, что источником утечки стал файл
разгрузки оперативной памяти, сгенерированный одним из компьютеров компании
Mainsoft, работающим под Linux. В ходе расследования утечки исходных кодов
операционных систем Windows 2000 и Windows NT стало известно, что в свободном
доступе оказалось порядке 15 процентов оригинального текста программ. Речь идет
о 30915 файлах исходного кода Windows 2000, содержащих 13,5 миллиона строк
текста, и 95103 файлах и 28 миллионах строк кода Windows NT. Исходный код был
написан на языках программирования ассемблер, С и С++.

Публикация исходного кода привела в восторг интернет-сообщество, но
насторожила экспертов. «В том, что исходный код попадет в случайные руки, нет
ничего хорошего, - говорил старший менеджер центра экстренного реагирования
антивирусной компании Symantec Оливер Фридрихс.- Его смогут изучать
злоумышленники, и у секьюрити-экспертов не будет возможности находить уязвимости
заранее».

Однако Microsoft отрицало и отрицает возможность любых проблем безопасности.
В заявлении компании говорится, что ее больше всего беспокоит возможность кражи
результатов ее труда, а не угроза безопасности, создаваемая этой утечкой. «Если
небольшой фрагмент исходного кода Windows становится общедоступным, то это
проблема защиты прав интеллектуальной собственности, а не безопасности» - заявил
представитель Компании. Как видите, Компанию в первую очередь волнуют вопросы
финансовых потерь. Впрочем, не удивительно: многие эксперты уверены, что
опасения по поводу того, что утечка кодов приводит к массовому выявлению
уязвимостей, безосновательны. Теоретически для хорошего инженера-аналитика весь
код является открытым. К тому же, даже гениальному хакеру на изучение кода
потребуется столько времени, что к моменту, когда он будет готов использовать
уязвимость, выйдет обновленная версия программного продукта. Спорное
предположение, не так ли? Но если оно вас не успокаивает, ставьте альтернативные
программные продукты на основе открытых кодов и радуйтесь жизни.

Quality on conscience of the buyer

А как же обстоят дела с открытием кода Windows 2003, спросит внимательный
читатель. Ну его нах, отвечают представители IT-сферы. Microsoft никто и не
просил открывать коды этой системы. Это вообще нужно только самой Microsoft.
Клонировать код можно и без Microsoft, а вот получить внятную документацию –
нет. Microsoft стремится лицензировать собственное ПО, чтобы иметь ещё больше
возможностей контроля доступа. Ещё в 2004 году решение Еврокомиссии говорило о
том, что Компании следует в 120-дневный срок предоставить точную документацию
интерфейса. Раскрытая информация должна была обновляться каждый раз после
выпуска новых версий. Речь об исходных кодах вообще не шла. Представители
Microsoft с умным видом заявили, что «исходный код – это и есть окончательная
документация, ДНК системы». Действительно, не отмажешься. От таких определений в
пору сходить с ума юристам и устраивать бесконечные судебные процессы. На чём,
собственно, и строится Компания вот уже столько лет.

В 2004 году Microsoft по решению ЕС предоставила 12.000 страничный (ага, это
не опечатка – 12 тысяч страниц) трактат с описанием исходного кода. Тогда
разобраться в нём евроспециалисты не смогли. В нынешнем году майкрасофтовцы
сжалились и пообещали всего 500 часов техподдержки с попыткой объяснения, чего
же они там на 12.000 страниц написали. Складывается впечатление, что Microsoft
как может, в рамках доступного законодательства, тормозит процесс, известный по
аксиоме «всё тайное рано или поздно становится явным» и при этом ещё пытается
проводить выгодную для себя политику запатентованных продуктов. Программа по
«разоблачению» Windows у Microsoft предполагает предоставление только справочных
лицензий на исходный код. Поэтому Microsoft позволит просматривать код,
обнаруживать в нем ошибки, но не разрешит вносить изменения. Так что если вы
создаете собственные приложения для Windows, то можете отлаживать код этих
приложений и код Windows с соответствующими API. По идеи это означает, что при
анализе функций защиты никто не станет проводить полную проверку защиты Windows,
но компоненты, связанные с вашим приложением, проверить будет возможно. Если же
вы обнаружите ошибку в Windows, то обязаны будете сообщить о ней в офис
Microsoft. И даже если вы предложите способ устранения ошибки, Компания
оставляет за собой правой выбирать, включать или нет его в следующий сервис-пак.

Даже при оптимальном варианте исследования кода Компания предоставит около
95% Windows. Еще три процента кода Microsoft вроде как не принадлежит, а
некоторые места – такие, как код активации продукта – имеют слишком большую
ценность, чтобы их открывать. К тому же распространение некоторых
криптографических элементов ограничено правительством США и не может быть
экспортированы в другие страны.

Пора уже понять, что исходные коды Windows - это миф. По информации
Microsoft, ОС Windows содержит несколько десятков (если не сотен) миллионов
строк кода, который постоянно дорабатывается и модернизируется. Даже в самой
Компании не совсем точно понимают, что же они разработали. Разбираться в коде
очень и очень сложно. Шумиха, время от время поднимаемая вокруг исходников,
выгодна в первую очередь самой Microsoft. Не откроют коды – сохранят
коммерческую тайну и скроют многочисленные ошибки. Откроют – ещё лучше.
Обеспечат более жёсткий контроль по лицензиям, ударят по Linux и практически
ничего не потеряют. В 2006 году обещан выпуск новой операционной системы Windows
Vista, исходники которой никто открывать не собирается. Хочется спросить у
Microsoft – какие конкретно выгоды получит пользователь от решения Комиссии ЕС?
Что именно поимеем мы вообще от решений Компании по собственному исходному коду?

Ядро Windows :

  • USER (16, 32) .dll – функции ввода с клавиатуры мыши, ввод через интерфейс и т.д. (взаимодействие приложений с пользователями и средой Windows).
  • KERNEL (16, 32) .dll – функции операционной системы (память, распределение системных ресурсов, загрузка).
  • GDI (16, 32) .dll – графический интерфейс (функции создания и отображения графических объектов).

GUI (Graphics User Interface) – стандартный графический интерфейс пользователя. Это та часть Windows , которая обеспечивает поддержку аппаратно-независимой графики.

API (Application Program Interface) - интерфейс прикладных программ (набор функций, сосредоточенных в ядре Windows и дополнительных библиотеках).

DLL (Dynamic Link Libraries) - библиотека динамической компоновки. Функции API содержатся в библиотеках динамической загрузки.

DDE – динамический обмен данными .

Нотация Windows ("венгерская нотация Чарльза Симони")

При программировании под Windows принято использовать префиксы перед именами переменных, указывающие на принадлежность к типу данных. Рекомендуется давать имена собственным переменным и идентификаторам, придерживаясь следующих принципов:

  1. мнемоническое значение – идентификатор должен легко запоминаться;
  2. смысловое значение – роль идентификатора должна быть ясна из его названия;
  3. преемственность – похожие объекты должны иметь похожие идентификаторы;
  4. быстрота принятия решения – придумывание, ввод и редактирование идентификатора не должны занимать много времени.

Некоторые префиксы венгерской нотации:

Префикс Значение
A массив
B логический тип (int)
By беззнаковый символьный тип (byte)
C символьный тип (1 байт)
Cb счетчик байтов
Cr цвет
cx,cy короткий тип (short)
Dbl double (с плавающей точкой)
Dw беззнаковое длинное целое число (dword)
Flt float (вещественная с плавающей точкой)
Fn функция
g_ префикс для глобальной переменной (глобальная переменная)
H handle (беззнаковое целое число)
hDC handle (указатель на контекст устройства)
I целое (integer)
Id интегральное значение идентификатора
L длинный тип (long)
Lp длинный указатель
Lpsz дальний указатель на строку, заканчивающуюся нулевым байтом
m_ переменная класса
N short или int
Np ближний указатель
P указатель
Pfn указатель на функцию
Pst указатель на структуру
Psz указатель на строку, заканчивающуюся нулевым байтом
Pv указатель на тип void
S строка
Sz строка, заканчивающая нуль-символом
U беззнаковый символ
Tm текстовая метрика
V тип void
W беззнаковое целое (word, 16-бит)
x, y короткое целое число (координата x или y)

Часто используемые типы данных Windows:

Тип данных Описание
HANDLE определяет идентификатор; 32-разрядное целое, используемое в качестве дескриптора – числа, определяющего некоторый ресурс
HWND определяет идентификатор окна
HDC определяет идентификатор контекста устройства
LONG 32-битовое целое со знаком
LPSTR определяет линейный указатель
NULL 0
UINT тип данных Win32 (32 бита для Win32)
WCHAR 16-битовый символ UNICODE. Используется для представления символов языков мира

Добавим следующий код:

#include LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS w; memset(&w,0,sizeof(WNDCLASS)); w.style = CS_HREDRAW | CS_VREDRAW; w.lpfnWndProc = WndProc; w.hInstance = hInstance; w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); w.lpszClassName = "My Class"; RegisterClass(&w); hwnd = CreateWindow("My Class", "Окно пользователя", WS_OVERLAPPEDWINDOW,500, 300, 500, 380, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam) { switch (Message) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wparam, lparam); } return 0; }

Скомпилируем и запустим программу. На экране появится Windows-окно.






rem программа_1
cls
@echo off
color 0A
set string=Hellow World!!!
echo %string%







program_1.cmd

rem программа_2
cls
@echo off
color 0A
set a=1
set timer=10
) else (echo a!=1)


ну зато понятен для многих.


rem программа_3
cls
@echo off
color 0A



(for /f "tokens=1-5" %A in (users.txt) do @echo %D) > emails.txt

К примеру, база у нас «идеальная», типа:

alexeykursk alexeykursk

2008-11-14T21:33:19Z 2008-11-14T21:33:19Z

Программирование в Cmd введение для новичков

-

Программирование в Cmd (введение для новичков)

Это всего лишь введение в команды cmd, не судите строго, статья писалась для Новиков, та и многим другим я думаю пригодиться =)
Наверно многие и не подозревают, что cmd это универсальная оболочка,
которая позволяет не просто администрировать систему, но и программировать!
Конечно уровень языка не столь высок, как например с, но все же...

Для начала, напишем маленькую программку, которая будет выводить строчку, записанную в переменную.
Заходим на диск С:\ и создаем там что то типа program_1.cmd (можно *.bat)
открываем его блокнотом и вписываем туда следующие строки:

rem программа_1
cls
@echo off
color 0A
set string=Hellow World!!!
echo %string%

rem - используеться для описния коментариев
cls - если кто еще незнает, это отчистка экрана
@echo off - выключаем отображение команд на экране. Обратите внимание на @
перед ECHO! Она предотвращает эхо-отображения команд в отдельной строке.
color 0A - задаем цвет фона и текста
set string=Hellow World!!! - set используется для описания переменных
echo %string% - вывод на экран переменной, обратите внимание на %%, это
обозначает, что это действительно переменная, а не строка!

С кодом разобрались, теперь посмотрим на исход программы! Запускаем ее на выполнение через cmd:
program_1.cmd
Результат выполнения будет, как вы догадались Hellow World!!! Ярко-зелеными буквами на черном фоне

Теперь немножко усложним задачку, добавим в этот код условие!

rem программа_2
cls
@echo off
color 0A
set a=1
set timer=10
if %a%==1 (shutdown /r -t %timer% -c "Вас похекали"
) else (echo a!=1)

Я думаю вы уже догадались что будет на выводе. Мы сравниваем значение записанное в переменную “а” с 1, если условие истина, то компьютер перезагрузиться через 10 секунд, в ином случае на вывод подается надпись, что a!=1. Пример банален и прост,
ну зато понятен для многих.

А теперь перейдем непосредственно к циклам. Рассмотрим самый элементарный пример:
rem программа_3
cls
@echo off
color 0A
for /l %B in (0,1,10) do echo %B

данная программа выведет в столбик цифры, от 0 до 10 с шагом 1 =) все просто, как...
А теперь немного сложнее, for может использоваться в более весомых целях,
например для перебора файлов, для примера можете написать в cmd:

for %B in (C:*.cmd) do (echo %B)

В ответ вы получите все ваши программки с расширением *.cmd

Также циклом for можно перебрать каталоги, к примеру

for /d %B in (C:*) do echo %B

Покажет все каталоги на диске С:\ (Обратите внимание, только каталоги, а не подкоталоги!)

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

(for /f "tokens=1-5" %A in (users.txt) do @echo %D) > emails.txt

К примеру, база у нас «идеальная», типа.

В данной статье будут рассмотрены основы командной строки Windows , а именно:

  • Понятие командной строки;
  • Справочник по командам командной оболочки;
  • Последовательность событий при выполнение команды;
  • Создание сценариев командной строки;
  • Управление отображением текста и команд;
  • Команды для изучение системной информации;
  • Команды для использования реестра;
  • Управление системными службами;
  • Перезагрузка и выключение систем из командной строки;
  • Управление приложениями и процессами из командной строки.

Понятие командной строки

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

Однако опытные администраторы Windows, квалифицированные специалисты по технической поддержке и «продвинутые» пользователи не могут обойтись без командной строки. Зная, как правильно применять командную строку, в частности, какие средства командной строки выбрать, как и когда их использовать, чтобы они работали эффективно, можно избежать многочисленных проблем и добиться четкого выполнения операций. Если вы занимаетесь поддержкой нескольких доменов или сетей, то для автоматизации ежедневных операций не только важно, но и необходимо иметь представление об экономящих время способах работы с командной строкой.

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

Среду командной оболочки Windows запускают разными способами, в частности указывая параметры при запуске Cmd.exe или используя собственный стартовый файл, хранящийся в каталоге %SystemRoot%\System32 .

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

Работая с командной строкой Windows, Вы должны понимать, откуда берутся используемые Вами команды. «Родные» команды (встроенные в операционную систему) бывают двух видов:

  • Внутренние – существуют внутри командной оболочки, у них нет отдельных исполняемых файлов;
  • Внешние — реализованы в отдельных исполняемых файлах, которые обычно хранятся в каталоге %SystemRoot% \System32.

Краткий справочник по командам командной оболочки (Cmd.exe)

  • assoc — выводит или изменяет сопоставления (associations ) типов файлов;
  • break — задает точки останова при отладке
  • call — вызывает из сценария процедуру или другой сценарий;
  • cd (chdir) — показывает имя текущего каталога или выполняет смену текущего каталога;
  • cls — очищает окно командной строки и буфер экрана;
  • color — задает цвета текста и фона окна командной оболочки;
  • сору — копирует файлы или выполняет конкатенацию файлов;
  • date — показывает или устанавливает текущую дату;
  • del (erase) — удаляет заданный файл, группу файлов или каталог;
  • dir — показывает список подкаталогов и файлов в текущем или заданном каталоге;
  • echo — выводит текст в окно командной строки или задает, надо ли отображать команды на экране (on|off);
  • endlocal — отмечает конец локализации (локальной области видимости ) переменных;
  • exit — выход из оболочки командной строки;
  • for — выполняет заданную команду для каждого файла в наборе;
  • ftype выводит или изменяет текущие типы файлов в сопоставлениях расширений файлов с программами;
  • goto — указывает, что интерпретатор команд должен перейти на строку с заданной меткой в пакетном сценарии;
  • if — выполняет команды по условию;
  • md (mkdir) — создает подкаталог в текущем или заданном каталоге;
  • move — перемещает файл или группу файлов из текущего или заданного исходного каталога в указанный каталог. Также может переименовывать каталог;
  • path — показывает или задает путь к командам, используемый операционной системой при поиске исполняемых файлов и сценариев;
  • pause — останавливает выполнение пакетного файла и ожидает ввода с клавиатуры;
  • popd — делает текущим каталог, имя которого было сохранено командой PUSHD;
  • prompt — указывает, какой текст должен показываться в строке приглашения;
  • pushd — сохраняет имя текущего каталога и при необходимости делает текущим заданный каталог;
  • rd (rmdir) — удаляет каталог или каталог вместе с его подкаталогами;
  • rem — помечает комментарии в пакетном сценарии или Config.nt;
  • ren (rename) — Переименовывает файл или группу файлов;
  • set — показывает текущие переменные окружения или задает временные переменные для текущей командной оболочки;
  • setlocal — отмечает начало локализации (локальной области видимости ) переменных в пакетных сценариях;
  • shift — сдвигает позицию замещаемых параметров в пакетных сценариях;
  • start — запускает заданную программу или команду в отдельном окне;
  • time — показывает или устанавливает системное время;
  • title — задает заголовок окна командной оболочки;
  • type — показывает содержимое текстового файла;
  • verify — включает режим проверки файлов после записи на диск;
  • vol — показывает метку и серийный номер дискового тома.

Синтаксис любой внутренней команды (и большинства внешних ) можно получить, введя в командной строке имя команды и /?, например:

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

Последовательность событий при выполнение команды

  • Командная оболочка заменяет любые переменные, введенные в тексте команд, их текущими — значениями;
  • Если введена группа или цепочка из нескольких команд, строка разбивается на отдельные команды, которые в свою очередь разбиваются на имя и аргументы команды. Далее команды обрабатываются по отдельности;
  • Если в имени команды указан путь, командная оболочка ищет команду по этому пути. Если в указанном каталоге такой команды нет, командная оболочка возвращает ошибку;
  • Если в имени команды не задан путь, командная оболочка сначала пытается разрешить имя команды на внутреннем уровне. Если найдена внутренняя команда с таким именем, значит, вызвана внутренняя команда, которую сразу же можно выполнить. Если внутренней команды с таким именем нет, командная оболочка сначала ищет исполняемый файл команды в текущем каталоге, а затем в каталогах, перечне в переменной окружения PATH. Если файла команды нет ни в одном из этих каталогов, командная оболочка возвращает ошибку;
  • Если команда найдена, она выполняется с заданными аргументами и при необходимости ввод считывается из источника, указанного в этих аргументах. Вывод и ошибки команд показываются в окне командной строки или направляются заданному приемнику вывода и ошибок.
  • Как видите, на выполнение команд влияют многие факторы, в том числе пути к командам, перенаправление ввода-вывода, группирование или создание цепочек команд.

При работе с командной оболочкой Вы, вероятно, запускали ее, открывая меню Start (Пуск ) и выбирая Programs (Программы ) или All Programs (Все программы ), затем Accessories (Стандартные ) и Command Prompt (Командная строка ). Другие способы запуска командной строки - диалоговое окно Run (Запуск программы ) или ввод cmd в другом, уже открытом окне командной оболочки. Эти способы позволяют при запуске командной строки указывать аргументы: ключи, управляющие работой командной строки, и параметры, инициирующие выполнение дополнительных команд. Например, можно запустить командную оболочку в «молчаливом» режиме (т. е. отключить эхо-вывод ) командой cmd /q или сделать так, чтобы командная оболочка выполнила заданную команду и завершила свою работу, — для этого нужно ввести cmd /с, а затем текст команды в кавычках.

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

Cmd /c "ipconfig > c:\ipconfig.txt"

Создание сценариев командной строки

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

Поскольку сценарии состоят из стандартных текстовых символов, их можно создавать и редактировать в любом стандартном текстовом редакторе, скажем, в Notepad (блокнот ). Вводя команды, убедитесь, что каждая команда или группа команд, которые должны выполняться совместно, разметаются с новой строки. Это обеспечит их корректное выполнение. Закончив создание сценария командной строки, сохраните файл сценария с расширением.bat или.cmd. Оба расширения работают одинаково. Например, если вам надо создать сценарий для вывода имени системы, версии Windows и конфигурации IP, включите в файл SysInfo.bat или SysInfo.cmd следующие три команды:

Hostname ver ipconfig -all

Управление отображением текста и команд

Команда ECHO служит двум целям: для записи текста в вывод (например, в окно командной оболочки или текстовый файл ) и для включения/выключения эхо-отображения команд. Обычно при выполнении команд сценария сами команды и вывод этих команд отображаются в консольном окне. Это называется эхо-отображением команд (comand echoing ).

Чтобы использовать команду ECHO для отображения текста, введите echo и текст, который надо вывести:

Echo The system host name Is: hostname

Чтобы с помощью ECHO управлять эхо-отображением команд, введите echo off или echo on, например:

Echo off echo The system host name is: hostname

Чтобы направить вывод в файл, а не в окно командной оболочки, используйте перенаправление вывода, например:

Echo off echo The system host name is: > current.txt hostname » current.txt

Теперь посмотрим, как подавляется эхо-отображение команд. Запустите командную оболочку, введите echo off, затем другие команды. Вы увидите, что приглашение командной строки больше не выводится. Вместо него появляется только то, что набирается в консольном окне, и вывод выполненных команд. В сценариях команда ECHO OFF отключает эхо-отображение команд и приглашение командной строки. Добавляя в свои сценарии команду ECHO OFF, вы предотвращаете загромождение окна командной оболочки или файла текстом команд, если Вас интересует лишь вывод от этих команд.

Изучение системной информации

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

  • NOW — отображает текущую системную дату и время в 24-часовом формате, например Sal May 9 12:30:45 2003. Доступна только в Windows Server 2003 Resource Kit;
  • WHOAMI — сообщает имя пользователя, зарегистрированного в системе на данный момент, например adatum\admi-nistrator;
  • WHERE — выполняет поиск файлов по шаблону поиска (search pattern ) и возвращает список совпавших результатов.

Чтобы использовать NOW или WHOAMI, просто введите команду в окне командной оболочки и нажмите Enter. Наиболее распространенный синтаксис для WHERE выглядит так:

Where /r базовый_каталог_имя_файла

Здесь параметр /r указан для рекурсивного поиска, начиная от указанного каталога (базовый_каталог) и включая все его подкаталоги, а имя_файла - полное или частичное имя искомого файла, которое может включать символы подстановки (wildcards): знак? заменяет один символ, а знак * - группу символов, например data???.txt или data*.*. В следующем примере в каталоге С:\ и всех его подкаталогах выполняется поиск всех текстовых файлов, имена которых начинаются с data.

Where /r C:\ data*.txt

Также можно найти файлы всех типов, имена которых начинаются с data:

Where /r C:\ data*.*

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

  • DRIVERQUERY — выводит список всех установленных драйверов устройств и их свойства, в том числе имя модуля (module name), отображаемое имя (display name ), тип драйвера и дату сборки (driver link date ). В режиме отображения всей информации (/V) сообщается статус (status) и состояние (state) драйвера, режим запуска, сведения об использовании памяти и путь в файловой системе. Параметр /V также включает вывод детальной информации обо всех неподписанных драйверах.
  • SYSTEMINFO — выдает подробную информацию о конфигурации системы, в том числе сведения о версии, типе и изготовителе операционной системы, процессоре, версии BIOS, объеме памяти, региональных стандартах, часовом поясе и конфигурации сетевого адаптера.
  • NLSINFO — отображает подробную информацию о региональных стандартах, включая язык по умолчанию (default language ), кодовую страницу Windows, форматы отображения времени и чисел, часовой пояс и установленные кодовые страницы. Эта команда доступна лишь в Windows Server 2003 Resource Kit.

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

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

Реестр Windows хранит конфигурационную информацию операционной системы, приложений, пользователей и оборудования. Эти данные содержатся в разделах (keys ) и параметрах (values ) реестра, которые размещаются в определенном корневом разделе (root key ), который контролирует, как и когда используются разделы и параметры.

Если Вы знаете пути к разделам и понимаете допустимые типы данных в разделах, то можете использовать команду REG для просмотра разделов и параметров и манипуляций над ними самыми разнообразными способами. REG поддерживает несколько подкоманд:

  • REG add — добавляет в реестр новый подраздел или элемент;
  • REG delete — удаляет из реестра подраздел или элемент;
  • REG query — выводит список элементов раздела и имена подразделов (если они есть );
  • REG compare — сравнивает подразделы или элементы реестра;
  • REG сору — копирует элемент реестра по указанному пути раздела на локальной или удаленной системе;
  • REG restore — записывает в реестр ранее сохраненные подразделы, элементы и параметры;
  • REG save — сохраняет копию указанных подразделов, элементов и параметров реестра в файл.

Управление системными службами

Службы обеспечивают ключевые функции рабочих станций и серверов. Для управления системными службами на локальных и удаленных системах используется команда контроллера служб (service controller command ) SC , имеющая набор подкоманд, ниже описывается лишь их часть:

  • SC config — настройка учетных записей регистрации и запуска служб;
  • SC query — вывод списка всех служб, настроенных на компьютере;
  • SC qc — отображение конфигурации определенной службы;
  • SC start — запуск служб;
  • SC stop — остановка служб;
  • SC pause — приостановка работы служб;
  • SC continue — возобновление работы служб;
  • SC failure — задание действий, выполняемых при сбое службы;
  • SC qfailure — просмотр действий, выполняемых при сбое службы.

Во всех командах можно указывать имя удаленного компьютера, со службами которого Вы хотите работать. Для этого вставьте UNC-имя или IP-адрес компьютера перед используемой подкомандой. Вот синтаксис:

Sc ИмяСервера Подкоманда

Перезагрузка и выключение систем из командной строки

Системы нередко приходится перезагружать или выключать. Один из способов - использовать для этого утилиту Shutdown, которая позволяет работать с локальной и удаленными системами. Другой способ управлять выключением или перезагрузкой системы - назначить задание для выключения. Здесь можно использовать Schtasks, чтобы указать время выключения, или создать сценарий со списком команд выключения для индивидуальных систем.

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

Выключение локальной системы:

Shutdown /s /t ЗадержкаВыключения /1 /f

Shutdown /r /t ЗадержкаВыключения /1 /f

Управление приложениями, процессами и производительностью

Всякий раз, когда операционная система или пользователь запускает службу, приложение или команду, Microsoft Windows запускает один или более процессов для управления соответствующей программой. Несколько утилит командной строки упростят вам мониторинг программ и управление ими. К этим утилитам относятся:

  • Pmon (Process Resource Manager ) — показывает статистические данные по производительности, включая использование памяти и процессора, а также список всех процессов, выполняемых в локальной системе. Позволяет получать детальные «снимки » задействованных ресурсов и выполняемых процессов. Pmon поставляется с Windows Resource Kit;
  • Tasklist (Task List ) — перечисляет все выполняемые процессы по имени и идентификатору процесса, сообщает информацию о сеансе пользователя и занимаемой памяти;
  • Taskkill (Task Kill ) — останавливает выполнение процесса, заданного по имени или идентификатору. С помощью фильтров можно останавливать процессы в зависимости от их состояния, номера сеанса, процессорного времени, занимаемой памяти, имени пользователя и других параметров.

Вот в принципе все, что я хотел рассказать об основах командной строки Windows.