Перехват потока
«Перехватить поток» — это значит перенаправить его туда, где он необходим.
Практически любая программа работает по следующей схеме:

Основным входным потоком является поток с клавиатуры. Основным выходным потоком является вывод на дисплей.
Перенаправление потока в операционной системе Windows выполняется с помощью трёх команд:
- <
- >
- >>
Команда "<" — это команда перенаправления входного потока.
Острие команды показывает, куда она направлена. Например: команда
<strong>debug.exe</strong> < file.txt
направляет входной поток из файла file.txt на вход программы debug.exe.
Это значит, что в файле file.txt записана последовательность команд, которую должна выполнить программа debug.exe.
Команда ">" это команда перенаправления выходного потока. Острие команды так же показывает, куда она направлена. Например:
Debug.exe > file1.txt.
означает, что результаты работы программы debug.exe будут направляться не на экран (как обычно), а в файл file1.txt.
Если этого файла не существует, он будет создан. А если он существует, его содержимое будет заменено результатами работы программы debug.exe. Т. е. информация в этот файл поступит, начиная с самого его начала.
Команда ">>" это команда перенаправления выходного потока. Острие команды так же показывает, куда она направлена.
Например:
Debug.exe >> file2.txt.
означает, что результаты работы программы debug.exe будут направляться не на экран, а в файл file2.txt.
Если этого файла не существует, он будет создан. А если он существует, его содержимое будет дополнено результатами работы программы debug.exe. Причём эти результаты ничего не уничтожат в файле, они дополнят старое содержимое файла (новые данные будут дописаны в его конец).
Как узнать адрес программы, имеющейся в ОС Windows?
Тип файла характеризуется его расширением. Для обработки файлов определённого типа предназначена своя программа.
- Определить тип файла можно с помощью команды assoc;
- Имя обрабатывающей файлы этого типа программы и её адрес можно получить командой ftype:

Пример 1:
Определить, какая программа обрабатывает файлы с расширением .pcx?
По команде assoc получаем:
.pcx=PCXImage.Document
В этом ответе находим, что файлы pcx относятся к типу «PCXImage.Document».
Определим, кто является обработчиком этого типа файлов и где находится сам обработчик:
C:\>ftype PCXImage.Document
PCXImage.Document="C:\Program Files\Windows NT\Accessories\ImageVue\KodakPrv.exe"
Здесь жирным шрифтом выделен путь к обработчику, курсивом — сам обработчик. После имени обработчика указывается передаваемый обработчику параметр.
Пример 2: надо узнать, где находится обработчик файлов, имеющих расширение htm. Выполняем:
C:\>assoc .htm .htm=htmlfile
C:\>ftype htmlfile
htmlfile="C:\Program Files\Internet Explorer\iexplore.exe"

Составление отчёта с помощью cmd-файла
Для начала представим себе, как может выглядеть такой отчёт:
Отчет о выполнении пакетного файла 02.cmd Подготовил: студент 1 курса 11 группы:
Ступков А.
создан: 24.04.2009
в
14:39
1) Связать имя папки с виртуальным логическим диском
1. Виртуальный диск O: будет связан с папкой
2. На диске C: будет создана папка work
3. Все файлы маски из будут скопированы в папку
в папке ...
найдены следующие текстовые файлы:
______________________________________________
01.cmd
02.cmd
02rep.txt
02rp.cmd
03.cmd
ff.txt
file1.txt
log3.txt
______________________________________________
копирование C:\_osso\ —> ... файлы скопированы успешно.
теперь папка work содержит следующие текстовые файлы:
______________________________________________
01.cmd
02.cmd
02rep.txt
02rp.cmd
03.cmd
ff.txt
file1.txt
log3.txt
______________________________________________
программа завершена.
Несмотря на краткость постановки задачи («Создать файл отчёта»), на самом деле данное задание имеет сложную структуру и включает в себя большое количество задач: для создания отчета надо не просто переправить содержимое экрана в файл, а написать сопроводительный текст, выделить для файла директорию, просмотреть содержимое папки, используемой при создании отчета, вывести содержимое экрана в файл отчета, и др.
Все эти задачи программа выполняет скрытно от пользователя. При запуске данной программы на экране появляется всего лишь информация о расположении файла отчета:

В текстовом редакторе данный командный файл может выглядеть следующим образом:
@echo off
echo Отчет о выполнении пакетного файла 02.cmd > 02rep.txt echo. >>
02rep.txt
echo Подготовил: студент 1 курса 11 группы:>> 02rep.txt
echo. >>
02rep.txt
echo Ступков А.>> 02rep.txt
echo. >>
02rep.txt
echo создан: >>
02rep.txt
date/t >>
02rep.txt
echo в >>
02rep.txt
time /t >>
02rep.txt
echo. >>
02rep.txt
echo 1) Связать имя папки с виртуальным логическим диском >>
02rep.txt
echo.
>> 02rep.txt
echo 1. Виртуальный диск O: будет связан с папкой C:\_osso
>> 02rep.txt
echo.
>> 02rep.txt
if not exist c:\_osso\
nul (echo папка _osso не найдена! >> 02rep.txt
goto END)
if exist O:\nul (echo Создание диска отменено: диск O: уже существует! >> 02rep.txt goto NOSU
)
else ( echo создание виртуального диска O: ... >> 02rep.txt
)
SUBST O: C:\_osso
if errorlevel 1 (echo не удалость создать диск O:! >> 02rep.txt goto END)
else ( echo диск O: создан и сопоставлен пути C:\_osso успешно.>> 02rep.txt)
:NOSU
echo. >> 02rep.txt
echo 2. На диске C: будет создана папка work >> 02rep.txt echo. >> 02rep.txt
if exist C:\work\nul ( echo Создание папки отменено: папка work уже существует! >> 02rep.txt
goto AFMD)
else ( echo создание папки c:\work ... >> 02rep.txt)
MD C:\work
if errorlevel 1 ( echo не удалость создать папку work! >>
02rep.txt goto END)
else ( echo папка work создана успешно. >> 02rep.txt): AFMD
echo. >> 02rep.txt
echo 3. Все файлы %1 маски из C:\_osso >> 02rep.txt
echo будут скопированы в папку C:\work >> 02rep.txt
echo. >> 02rep.txt
echo поиск текстовых файлов в папке c:\_osso... >> 02rep.txt if not exist C:\_osso\%1 (
echo текстовые файлы не найдены. >> 02rep.txt
goto END)
echo. >> 02rep.txt
echo найдены следующие текстовые файлы: >> 02rep.txt
echo ________________________________ >> 02rep.txt
echo / \ >> 02rep.txt
DIR C:\_osso\%1 /B /P >> 02rep.txt
echo \________________________________ / >> 02rep.txt
echo. >> 02rep.txt
echo копирование C:\_osso\%1 —Л> C:\work ... >> 02rep.txt
echo. >> 02rep.txt
COPY C:\_osso\%1 C:\workecho. >> 02rep.txt
if errorlevel 1 ( echo возникли ошибки... >> 02rep.txt
goto END)
else ( echo файлы копированы успешно. >> 02rep.txt)
echo. >>
02rep.txt
echo теперь папка work содержит следующие текстовые файлы: >> 02rep.txt
echo _ >>
02rep.txt
______________________
echo / \ >>
02rep.txt
DIR C:\work\%1 /B /P >>
02rep.txt
echo \______________________/ >>
02rep.txt: END
echo. >>
02rep.txt
echo программа завершена. >>
02rep.txt
echo.cls
echo Отчет создан успешно и записан в файл 02rep.txt
pause
cls
Создание меню
Меню в командной строке Windows2000/XP создаётся из нескольких BAT- или CMD- файлов, находящихся в одной директории.
При создании меню создается cmd-файл, содержащий пункты меню и команду PROMPT, которая содержит текст «Введите номер выбранного пункта и нажмите ENTER...».
Кроме этого файла создаются cmd-файлы с именами 1,2,3,4 и т.д., эти файлы выполняют действия пунктов, которые содержатся в меню. Каждый из этих файлов заканчивается командой вызова основного cmd-файла меню.
Последний файл меню содержит команду выхода из меню.
Для входа в меню в командной строке набирается имя файла который содержит пункты меню и команду Prompt. При необходимости командная строка может содержать и замещаемые параметры.
Т.к. для создании меню применяется команда PROMPT, а в примере также используется архиватор WINRAR, в приложении приводятся соответствующие Help.
Пример создания меню с помощью cmd-файлов.
Шаг №1- Создаём файл menu.cmd
C:\>copy con menu.cmd
Echo off Cls
Echo Стартовое меню
Echo. Echo.
Echo 1. Просмотреть содержимое файла.
Echo. Echo.
Echo 2. Архивировать файл и удалить исходный.
Echo. Echo.
Echo 3. Разархивировать файл и удалить архив.
Echo. Echo.
Echo 4. Выход.
Echo.
Prompt Введите номер и нажмите ENTER...
Команда Prompt в процессе работы командного файла выводит новое приглашение командной строки — надпись «Введите номер и нажмите ENTER...». После этой надписи должна быть набрана цифра 1,2,3 или 4 — эти цифры соответствуют именам cmd-файлов, пример создания которых будет приведён ниже, эти cmd-файлы будут выполнять действия, предлагаемые в меню.
При запуске созданного файла menu из командной строки на экране появится меню:
Стартовое меню
1. Просмотреть содержимое файла
2. Архивировать файл и удалить исходный
3. Разархивировать файлы и удалить архив
4. Выход
Введите номер и нажмите ENTER...
Теперь создадим файлы с именами 1,2,3 и 4. Эти файлы будут выполнять следующие действия:
- Просматривать содержимое введённого замещающим параметром файла;
- Архивировать указанный файл и удалять исходный файл;
- Разархивироввать указанный архив в указанную замещающим параметром директорию, и удалять архив;
- Выход из меню;
Структура файла 1.cmd и обращение к нему:
Создадим файл 1.cmd
Введите номер и нажмите ENTER...
C:\>copy con 1 .cmd
type %1 |more
раuse
menu
%1 — замещаемый параметр, т.е. вместо %1 из командной строки вводится путь и имя просматриваемого файла.
|more — этот параметр останавливает содержимое экрана в том случае, если информация о содержимом файла не помещается на экран.
Pause — останавливает экран до нажатия любой клавиши, после чего срабатывает команда menu (имя файла который содержит внешний вид меню) и происходит возврат в меню.
Если команда pause отсутствует, то в случае, если содержимое файла помещается на экране, оно не будет задерживаться на экране, а будет происходить быстрый возврат в меню. Выводимое изображение просто промелькнёт, после чего на экран будет снова вызвано меню.
Пример 1. Обращение к файлу 1.cmd: информация из файла выводится на экран (обращение выделено):
Стартовое меню
1. Просмотреть содержимое файла
2. Архивировать файл и удалить исходиый
3. Разархивировать файлы и удалить архив
4. Выход
Введите номер и нажмите ENTER... C:\vns\ll\tl.txt
Выводиться текст
Pause
Для продолжения нажмите любую клавишу...
После нажатия любой клавиши произойдёт возврат в меню.
Структура файла 2.cmd и обращение к нему:
Создадим файл 2.cmd
cd %i
rar а %2 %3
del «3
cd с:\
menu
сd %1 — эта команда автоматически переводит нас в папку где установлен архиватор, делая её активной. (Папка с местонахождением архиватора задаётся замещаемым параметром. (Обычно — это files\Winrar))
Rаr а %2 %3 — команда архивирует указанный файл (например, если для %3 заданоС:\vms\ll\tl.txt) в архив tl.rar (если для %2 задано С:\vms\ll\tl.rar).
Del %3 — команда удаляет файл который был заархивирован (когда для %3 было задано)
Обращение к файлу при выборе пункта 2 меню будет выглядеть следующим образом (обращение выделено):
Стартовое меню
1. Просмотреть содержимое ф аила
2. Архивировать ф айл и удалить исходный
3. Разархивировать ф айлы и удалить архив 4 RhiwnA
Введите номер и нажмите ENTER. C:\Program iites\Winrar C:\vtns\11\t1.rar
Введите номер и нажмите ENTER. cd c:\program files\Winrar
Введите номер и нажмите ENTER. rar a c:\vms\11\t1.rar c:\vmз\11\t1.txt
RAR 2.71 Авторские права (С) 1993-2000 Евгений Рошал 20 июня 2000
Незарегистрированная копия. Наберите RAR -? для получения справки
Незарегистрированная копия. Пожалуйста, зарегистрируйтесь.
Создание архива c:\vms\11\t1.rar
Добавление vms\11\t1.txt ОК
Готово
Введите номер и нажмите ENTER...del c:\vms\11\t1.txt
Введите номер и нажмите ENTER...cd c:\
При архивировании файла информация пролетает очень быстро, информация была снята в результате добавления в конец команды pause.
Структура файла 3.cmd и обращение к нему:
Создадим файл 3.cmd
cd %2
rar е %2 %З
del %1
cd\
menu
Cd %1 -. эта команда автоматически переводит нас в папку, где установлен архиватор, делая её активной. (Папка с местонахождением архиватора задаётся замещаемым параметром (C:\Program files\Winrar))
Rаг е %2 %3 - команда разархивирует указанный архив (для %2 = (C:\vms\11\t1.rar)). в указанную директорию (для %3 = (C:\vms\11\)).
Del %2 — команда удаляет архив который был разархивирован (для %2 = (C:\vms\ll\tl.rar))
Обращение к файлу выглядит следующим образом (обращение выделено):
Стартовое меню
1. Просмотреть содержимое файла
2. Архивировать файл и удалить исходный
3. Разархивировать файлы и удалить архив
4. Выход
Введите номер и нажмите ENTER...C:\Program iites\Winrar C:\vtns\11\t1.rar
Введите номер и нажмите ENTER...cd c:\program files\Winrar
Введите номер и нажмите ENTER...rar e c:\vms\11\t1.rar c:\vmз\11\
Извлечение из c:\vms\11\t1.rar
Извлечение c:\vms\11\t1.txt ОК
Введите номер и нажмите ENTER...del c:\vms\11\t1.rar
Введите номер и нажмите ENTER...cd c:\
При разархивировании файла информация пролетает очень быстро, информация была снята в результате добавления в конец команды pause.
Структура файла 4.cmd и обращение к нему:
Создадим файл 4.cmd
Exit
Файл 4.cmd содержит одну команду exit, это команда выхода из меню.
Обращение к файлу:
Стартовое меню
1. Просмотреть содержимое файла
2. Заархивировать файл и удалить его
3. Разархивировать файлы и удалить архив
4. Выход
Введите номер и нажмите ENTER...4
При обращении к файлу 4.cmd происходит выход из меню.
Исследование программы Find.exe
Утилита Find.exe используется для нахождения отрывка текста в одном или нескольких файлах.
1) Создадим текстовый файл Sample.txt на диске с:
Белеет парус одинокий
В тумане моря голубом
Что ищешь ты в стране далекой
2) формат команды:
FIND [/V] [/С] [/N] [/I] "строка" [[диск:][путь]имя_файла[ ...]]
где "строка" — Искомая строка (шаблон для поиска).
[диск:][путь]имя_файла — Один или несколько файлов, в которых выполняется поиск.
/ V — Вывод всех строк, НЕ содержащих заданную строку.
C:\>find /v "моря" c:\samp1e.bat
..........C:\SAMPLE.TXT
Белеет парус одинокий
Что ишешь ты в стране далекой
/С — Вывод только общего числа строк, содержащих заданную строку.
C:\>find /с "моря" c:\sample.txt
..........C:\SAMPLE.TXT: 1
/N — Вывод номеров отображаемых строк.
C:\>find /п "моря" c:\sample.txt
..........C:\SAMPLE.TXT
[2]В тумане моря голубом
/I — Поиск без учета регистра символов.
C:\>fmd /i "моря" c:\samplе.txt
..........C:\SAMPLE.TXT
В тумане моря голубом
Создание командного файла, использующего программу Find.exe
Создадим командный файл Fstring.bat, использующий программу Find.exe.
C:\>copy con fstring.bat
find /%1 "%2" С:/%3
^Z
Скопировано файлов: 1.
В данном примере:
%1 — переменная, запрашивающая параметр вывода ([/V] [/С] [/N] [/I]).
%2 — переменная, запрашивающая строку для поиска.
%3 — переменная, запрашивающая файл с диска "С:" в котором будет искаться данная строка.
Далее создадим текстовый файл в котором мы будем искать строку.
I asked him about comandnles
And what do you think he answered
He told that it is very simple
To make it properly
Теперь введем команду fstring 12 3, где 1, 2 и 3 — параметры функции.
Например:
С:\>fistring n do sample.txt
C:\>find/n "do" с:/sample.txt
..........C:/SAMPLE.TXT
[2]And what do you think he answered
Управление из командной строки программой msinfo32
Помимо средства «Сведения о системе» для просмотра данных об управляемом компьютере можно использовать команду msinfo32.
Msinfo32 служит для отображения подробных сведений об оборудовании, системных компонентах и среде программного обеспечения.
Синтаксис
msinfo32 [/?] [/pch] [/nfo имяфайла] [/report имяфайла] [/computer имя компьютера] [/showcategories] [/category код категории] [/categories код категории]
Параметры
имяфайла — файл, который требуется открыть. Файл может иметь расширение NFO, XML, TXT или CAB.
/? — отображение справки по команде msinfo32.
/pch — отображение журнала.
/nfo имяфайла — сохранение экспортированного файла как NFO-файла.
/report имяфайла — сохранение экспортированного файла как TXT-файла.
/computer имякомпьютера — открытие окна сведений о системе для указанного удаленного компьютера.
/showcategories — открытие окна сведений о системе, содержащего все доступные коды категорий.
/category код категории - Открытие окна сведений о системе, в котором выбрана указанная категория. Для отображения списка доступных кодов категорий служит параметр /showcategories.
/categories кодкатегории — открытие окна сведений о системе, содержащего только указанные категории. Вывод также ограничивается только выбранными категориями. Для отображения списка доступных кодов категорий служит параметр /showcategories
Примеры
Чтобы получить список доступных кодов категорий, введите:
msinfo32 /showcategories
Чтобы открыть окно сведений о системе, содержащее все доступные сведения, кроме сведений о загруженных модулях, введите:
msinfo32 /categories +all -loadedmodules
Чтобы открыть окно сведений о системе и создать NFO-файл syssum.nfo, содержащий сведения категории «Сведения о системе», введите:
msinfo32 /nfo syssum.nfo /categories +systemsummary
Чтобы вывести сведения о конфликте ресурсов и создать NFO-файл conflicts.nfo, содержащий сведения о конфликтах ресурсов, введите:
msinfo32 /nfo conflicts.nfo /categories +componentsproblemdevices+resourcesconflicts+resourcesforcedha rdware
Команда FINDSTR
Findstr — поиск образцов текста в файлах с использованием регулярных выражений.
Формат команды:
findstr [/b] [/е] [/I] [/r] [/s] [/i] [/х] [/v] [/n] [/m] [/о] [/p] [/offline] [/g:файл] [/f:файл] [/с:строка] [/d:СписокКаталогое] [/a:АтрибутЦвета] [строки] [[диск:][путъ] ИмяФайла [...]]
, где строки — текст, поиск которого производится в файле, заданном параметром ИмяФайла [диск:][путь] ИмяФайла [...] — файл или несколько файлов для поиска
Таблица 1 Ключи команды
/b | Сравнивает шаблон с началом строки. |
/е | Сравнивает шаблон с концом строки. |
/I | Использует заданную строку буквально. |
/r | Использует строку поиска как регулярное выражение. Команда Findstr интерпретирует все метасимволы как регулярные выражения, если не используется ключ /I. |
/s | Задает поиск файлов в текущем каталоге и его подкаталогах. |
/i | Задает поиск без различия строчных и заглавных букв. |
/х | Печатает точно совпавшие строки. |
/v | Печатает строки, не содержащие совпадений. |
/n | Печатает в начале совпавшей строки ее номер. |
/m | Печатает только имя файла при обнаружении совпадения. |
/o | Печатает смещение перед выводом строки с совпадением. |
/p | Пропускает файлы с непечатаемыми символами. |
/offline | Обработка файлов с автономным атрибутом. |
/f:файл | Читает список из заданного файла. |
/с:строка | Использует заданный текст как литеральную строку поиска. |
/g:файл | Получает строки поиска из заданного файла. |
/d:Список каталогов | Ищет в списке каталогов, разделенном запятыми. |
/а:Атрибут цвета | Задает атрибуты цвета двумя шестнадцатеричными цифрами. |
Пример использования команды findstr:
Сначала создадим текстовый файл 1.txt, используя команду copy con:

Теперь найдем строки содержащие слово «Я». Для этого введем команду:
C:\>findstr "Я" 1.txt

Если нам необходимо найти целую строку или определенное словосочетание, то воспользуемся командой:
C:\>findstr /с:"обманываться рад" 1.txt

Для вывода на экран строк не содержащих совпадений воспользуемся командой:
C:\>findstr /v /с:"обманываться рад" 1.txt
Команда SORT
Команда SORT считывает входящие данные, сортирует их. Результат может быть выведен на экран, в файл или на другое устройство.
Формат команды:
SORT [/R] [/+n] [/M килобайтов] [/I язык] [/REC символов] [[диск1:][путь1]имя_файла1] [/T [диск2:][путь2]] [/O [диск3:][путь3]имя_файла3]
, где ключи команды:
/г
Изменяет порядок сортировки, задает сортировку от Z к A, затем от 9 к 0.
/+n
Указывает номер позиции символа, n, начиная с которой sort выполняет сравнение.
/m килобайты
Указывает количество основной памяти, используемой для сортировки (в килобайтах).
/I язык
Переопределяет порядок сортировки символов, задаваемый языком, который используется системой по умолчанию(т. е. языком и страной/регионом, выбранными при установке).
/rec символы
Указывает максимальное число символов в записи (или строке) входного файла. (Значение по умолчанию равно 4096, максимальное значение — 65535).
[диск 1:][путь1]имя файла 1
Указывает сортируемый файл. Если имя не указано, сортируется стандартный ввод. При указании входного файла команда работает быстрее, чем при перенаправлении того же файла на стандартный ввод.
/t [диск2:][путь2]
Указывает каталог для хранения рабочих данных команды sort, если сортируемые данные не помещаются в основной памяти. По умолчанию используется системный временный каталог.
/o [диск3:][путь3]имя файла3
Указывает файл для хранения отсортированного ввода. Если параметр не указан, данные будут записываться в стандартный вывод. При указании выходного файла команда работает быстрее, чем при перенаправлении того же файла на стандартный вывод.
Так же команда SORT без параметров может быть использована для сортировки информации, вводимой с клавиатуры. Затем следует ввести текст, который необходимо отсортировать; каждая строка заканчивается нажатием клавиши ENTER. Когда ввод будет закончен, следует нажать комбинацию CTRL+Z и ENTER. Команда sort выведет на экран введенные строки, отсортированные в алфавитном порядке.
Команда — FTYPE
Просмотр и изменение типов файлов, сопоставленных с расширением имен файлов
FTYPE [типФайлов [=[команднаяСтрокаОткрытия]]]
типФайлов — Тип файлов для просмотра или изменения
команднаяСтрокаОткрытия — Команда, используемая для открытия файлов указанного типа.
- Команда FTYPE без параметров выводит текущий список типов файлов, для которых определены командные строки открытия;
- Если указан только тип файла, FTYPE выводит командную строку открытия для этого типа файлов;
- Если после знака равенства не указана строка открытия, FTYPE удалит текущее сопоставление для указанного типа файлов;
- При вызове командной строки переменные %0 и %1 заменяются на имя файла, запускаемого с помощью сопоставления;
- Вместо переменной %* подставляются все параметры, а переменные %2, %3 и т.д. заменяются, соответственно, на первый, второй и другие параметры;
- Вместо переменной %~n подставляются все оставшиеся параметры, начиная с n, где n является числом от 2 до 9. Например:
ASSOC .pl=PerlScript
FTYPE PerlScript=perl.exe %1 %*
Эти команды позволят вызывать обработчик команд Perl следующим образом:
script.pl 1 2 3
- Если желательно избежать постоянного ввода расширения имен файлов, введите следующую команду:
set PATHEXT=.pl;%PATHEXT%
Теперь обработчик команд вызывается еще проще:
script 1 2 3
Команда subst
Сопоставление имени диска указанному пути.
Формат команды
SUBST [диск1: [диск2:]путь] SUBST диск1: /D
где
диск1: Виртуальный диск, который сопоставляется указанному пути.
[диск:]путь Физические диск и путь, которым сопоставляется виртуальный диск.
/D Удаление ранее созданного виртуального диска.
SUBST без параметров — вывод текущего списка виртуальных дисков.
Создадим виртуальный диск М, который сопоставляется с путём:

Таким образом, в папке «Мой компьютер» появится новый диск М:

Теперь удалим этот диск:

Соответственно, он перестанет существовать и в «Моём компьютере».
Исправление тестирующей программы за счёт комплексирования программных средств
Постановка задачи: имеется программа для тестирования знаний по методу «один правильный ответ». Программа может быть использована для тестирования разнообразных знаний. С этой целью задаваемые вопросы, возможные ответы на них и правильные ответы содержатся в текстовом файле с расширением .dat,
Необходимо скрыть текстовый файл от тестируемых.
При решении этой задачи реализован следующий подход: на языке C# составлена программа зашифровки текста (shifruem.cs). С её помощью текст превращается в зашифрованный файл с расширением ".s".
Во время тестирования учащимся предоставляются:
- Текстовый файл с расширением ".s"
- Программа расшифровки "d.exe", создающая файл с расширением .dat
- Тестирующая программа tt.exe
- Два cmd-файла: "begin.cmd" и "tt1.cmd";
Файл "begin.cmd" создаёт на диске С: скрытую папку, путь к которой превращает в логический диск W. На этот диск переписываются тестирующая программа и восстановленный текстовый файл с вопросами теста и ответами на них. Правильный ответ располагается всегда первым. Логический диск W существует только во время тестирования и удаляется при выходе из программы.
Сказать, что так создана идеальная система защиты от несанкционированного просмотра ключевого файла, нельзя. Но для того, чтобы найти этот файл, надо понимать команды, в cmd-файлах. А это требует наличия у тестируемого определённой квалификации.
Естественно, воспользоваться таким способом тестирования можно только однажды.
Далее приводятся: содержание подготовленной к тестированию папки, тексты cmd-файлов, внешний вид экрана во время тестирования и текст программы shifruem.cs.
Подготовленная к тестированию папка содержит:

Текст файла Begin.cmd:
@echo off color F0
if not exist c:\12 md c:\12\
if not exist c:\12\weojrdkci md c:\12\weojrdkci
if not exist w: subst w: c:\12\weojrdkci
attrib +H +S /S /D c:\12\weojrdkci D.exe
copy test1.dat w:\test1.dat
copy 2.s w:\2.s
copy Tt.exe w:\Tt.exe
copy tt1.cmd w:\tt1.cmd
del test1.dat
rem del D.exe 2.s Tt.exe tt1.cmd test1.dat w:
tt1.cmd
Текст файла tt1.cmd:
@echo off
tt.exe
c:
subst w: /d
Использование такого комплекса программ приводит к тому, что расшифрованного файла с тестом не видно — он спрятан.
В данном случае цель достигается за счёт комплексирования программных средств: не имеющего исходных текстов файла тестера (не только не имеющего исходных текстов, но и неизвестно, на каком языке написанного), двух простых программ -написанных на языке C#, и двух командных файлов операционной системы Windows.

А зашифровка ведётся программой Shifruem.exe.
Текст программы Shifruem.exe:
using System; using System.IO; using System.Text; namespace FileStream {
class Class1 {
[STAThread]
static void Main(string[] args) {
//Ооздаем экземпляр Chitat класса StreamReader и указываем путь к файлу и его название
StreamReader Chitat = new StreamReader("test1.txt",System.Text.Encoding.GetEncoding("w indows-1251"));
// Объявляем переменную A.
string A;
//В переменную А считываем содержимое файла.
A = Chitat.ReadToEnd();
//Закрываем поток
Chitat.Close();
//объявляем переменную temp, в которой накапливается //зашифрованный текст
string temp = "";
// Шифруем!!!
for (int i = 0; i < A.Length; i++) temp += (char)(A[i] + 1);
// Выводим на экран: //string AC=" Вот, что сделали: ";
//Console.WriteLine(AC);
//Console.WriteLine(temp); //Останавливаемся для просмотра: //Console.ReadLine();
//Создаем экземпляр Pisat
//класса StreamWriter StreamWriter Pisat = new StreamWriter("2.s", true, System.Text.Encoding.Unicode);
//Вызываем метод Write экземпляра Pisat Pisat.Write(temp); //Закрываем поток
Pisat.Close();
}
}
}