Лабораторная работа 2 – 2012 Интерпретатор командной строки ОС MS Windows XP
Автор: drug | Категория: Технические науки / Информатика | Просмотров: | Комментирии: 0 | 03-11-2013 10:29

Лабораторная работа  2 – 2012

Интерпретатор командной строки ОС MS Windows XP 

Часть 2. Язык интерпретатора и командные файлы

Цель работы – знакомство с языком интерпретатора командной строки ОС MS Windows XP и командными файлами, приобретение навыков самостоятельной разработки и отладки сценариев.

1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

1.1 Язык интерпретатора Cmd.exe. Командные файлы

Язык оболочки командной строки в ОС служит для написания командных файлов (КФ). Командный файл (или сценарий) в Windows — это текстовый файл с расширением cmd или bat, в котором записаны  внешние и внутренние команды ОС, а также некоторые дополнительные команды. Исполнение КФ приводит к тому же результату, что и последовательный ввод записанных в нем команд. При выполнении одинаковых действий использование КФ может сэкономить время.

Управление последовательностью выполнения команд КФ осуществляют операторы IF, FOR, CALL и GOTO, выполнение которых аналогично работе одноименных операторов языков программирования. Для отключения дублирования выполняемых команд в начале КФ записывается команда @ECHO OFF. В приводимых ниже примерах КФ для уменьшения объема данная команда опущена.

1.1.1 Параметры командной строки. Команда shift

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

Для доступа из КФ к параметрам командной строки применяются переменные %0, %1, …, %9 или %*. Значением переменной %0 является имя выполняемого КФ, переменные %1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а переменная %* — все аргументы. Если в командной строке при вызове КФ задано меньше девяти параметров, то оставшиеся переменные из %1 – %9 замещаются пустыми строками.

Пример 1. Пусть имеется КФ cop.bat:

ECHO Файл %0 копирует каталог %1 в %2
XCOPY %1 %2 /S

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

cop.bat C:\Programs D:\Backup, на экран будет выведется сообщение 
Файл cop.bat копирует каталог C:\Programs в D:\Backup 

и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.

При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT (сдвиг влево), которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новым значением %9  будет пустая строка.

Пример 2. Пусть КФ my.bat вызван из командной строки следующим образом:

my.bat p1 p2 p3

Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.

Выполнить обратный сдвиг невозможно - нельзя восстановить параметр (%0), который был первым перед сдвигом.

 

1.1.2 Функции анализа имен файлов

В КФ предусмотрены функции анализа имен файлов и выделения свойств файла. Для параметра КФ с номером n (%n), задающего имя файла, допустимы функции, представленные в табл. 1.

Таблица 1. Функции анализа имен файлов

Функции

Выделяемое свойство файла

%~Fn

Переменная %n расширяется до полного имени файла

%~Nn

Из переменной %n выделяется только имя файла

%~Xn

Из переменной %n выделяется расширение имени файла

%~Tn

Возвращается дата и время создания (модификации) файла

%~Zn

Возвращается размер файла в байтах

 

Данные функции можно объединять друг с другом, например:

%~NXn — из переменной %n выделяются имя файла и расширение.

Пример 3. В каталоге C:\TEXT запущен КФ с параметром test.doc (%1=test.doc). Размер файла 5150 байт, дата создания 12.12.2011, время 18:57. Тогда применение функций, описанных в табл. 1, к параметру %1 даст следующие результаты:

%~F1=C:\TEXT\test.doc
%~N1=test
%~X1=.doc
%~NX1=test.doc
%~T1=12.12.2011 18:57
%~Z1=5150

1.1.3. Переменные среды. Оператор присваивания  SET. Получение значений переменных

Внутри КФ можно использовать так называемые переменными среды (или переменные окружения), каждая из которых хранится в оперативной памяти, имеет свое уникальное имя, а ее значением является строка. Стандартные переменные среды автоматически инициализируются в процессе загрузки операционной системы. К таким переменным относятся:

 WINDIR, которая определяет расположение каталога Windows,

 TEMP, которая определяет путь к каталогу для хранения временных файлов Windows

 PATH, в которой хранится системный путь (путь поиска), то есть список каталогов, в которых система должна искать выполняемые файлы или файлы совместного доступа.

 В КФ с помощью команды присваивания значений SET можно объявлять собственные переменные среды и изменять их значения.

Для получения значения определенной переменной среды нужно заключить имя этой переменной в символы %. Например:

:: new variable NewVar
SET NewVar=new variable
ECHO value of NewVar: %NewVar% 
ECHO value of WinDir: %WinDir%

При запуске такого КФ на экран выведутся две строки:

value of NewVar: new variable
value of WinDir: C:\WINDOWS
1.1.4. Преобразования переменных как строк

С переменными среды в КФ можно производить операции преобразования, используя команду (оператор) SET.

 Во-первых, над ними можно производить операцию конкатенации (соединения). Для этого нужно в команде SET просто написать рядом значения соединяемых переменных.

Во-вторых, из переменной среды можно выделять подстроки с помощью конструкции %имя_переменной:~n1,n2%, где число n1 определяет смещение (количество пропускаемых символов) от начала (если n1 положительно) или от конца (если n1 отрицательно) соответствующей переменной среды, а число n2 – количество выделяемых символов (если n2 положительно) или количество последних символов в переменной, которые не войдут в выделяемую подстроку (если n2 отрицательно). Если указан только один отрицательный параметр -n, то будут извлечены последние n символов. Например, если в переменной хранится строка "21.12.2012" (символьное представление текущей даты ), то после выполнения команд

SET dd1=%DATE:~0,2%

SET dd2=%DATE:~0,-8%

SET mm=%DATE:~-7,2%

SET yyyy=%DATE:~-4%

новые переменные будут иметь значения: %dd1%=21, %dd2%=21, %mm%=12, %yyyy%=2012.

В-третьих, можно выполнять процедуру замены подстрок с помощью конструкции %имя_переменной:s1=s2% .В результате будет возвращена строка, в которой каждое вхождение подстроки s1 в соответствующей переменной среды заменено на s2. Например, после выполнения команд

SET a=123456
SET b=%a:23=99%

в переменной b будет храниться строка "199456".

1.1.5. Операции с переменными как с числами

Значения переменных среды при выполнении КФ можно рассматривать как целые числа и производить с ними арифметические вычисления. Для этого используется оператор SET с ключом /A. Ниже приведен пример пакетного файла add2num.bat, складывающего два числа, заданных в качестве параметров командной строки, и выводящего полученную сумму на экран:

:: Вычисление суммы и запись ее в переменную М
SET /A M=%1+%2
ECHO Сумма %1 и %2 равна %M%
В операторе SET с ключом /A могут использоваться операции – (вычитание), * (умножение), / (деление нацело), % (остаток от деления). При использовании знака % в качестве знака операции деления в КФ он должен быть записан ДВАЖДЫ.
Рекомендуется при инициализации числовых переменных использовать ключ /A 
SET /A col=0
 
1.1.6 Ввод значения переменной с клавиатуры
Ввод значения переменной при выполнении КФ выполняется оператором SET с ключом /P. Например, для ввода значения переменной M следует использовать команду
SET /P  M=[введите M]
Текст подсказки [введите М] выводится на экран.
1.1.7. Связывание времени выполнения для переменных

При использовании группировки команд c помощью круглых скобок (например, в операторе IF) нужно учитывать, что переменные среды в КФ используются в режиме раннего связывания. С точки зрения логики выполнения КФ это может привести к ошибкам. Например, рассмотрим КФ 1.cmd:

SET a=1
ECHO a=%a% 
SET a=2
ECHO a=%a%

и КФ 2.cmd:

SET a=1
ECHO a=%a% 
(SET a=2
ECHO a=%a% )
:: использованы () для группировки команд

По логике результат выполнения КФ файл1 и файл2 должен быть одинаковым - на экран должны быть выведены строки: "a=1" и "a=2". Реально так работает только файл 1.cmd, а файл 2.cmd два раза выведет строку "a=1".

Для правильного выполнения КФ, в котором используется группировка команд, для получения значения переменной вместо знака процента (%)необходимо использовать восклицательный знак (!) и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, для корректной работы файл 2.cmd должен иметь следующий вид: (рекомендуется проверить)

SETLOCAL ENABLEDELAYEDEXPANSION 
SET a=1
ECHO a=%a% 
(SET a=2
ECHO a=!a!)
 

1.1.8. Прерывание и приостановка выполнения командных файлов

Для того, чтобы вручную прервать выполнение запущенного bat-файла, нужно нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Часто бывает необходимо программно приостановить выполнение КФ в определенной строке с выдачей запроса на нажатие любой клавиши. Для этого используется команда PAUSE. 

1.1.9. Вызов внешних командных файлов. Оператор CALL

Из одного КФ можно вызвать другой, указав его имя. Например:

:: Вывод списка log-файлов
DIR C:\*.log
:: Передача выполнения файлу f.bat
f.bat
COPY D:\*.* C:\
PAUSE

В этом случае после выполнения КФ f.bat управление в вызывающий файл не передается. Для того, чтобы вызвать внешний КФ с возвратом в первоначальный файл, нужно использовать оператор CALL файл. Например:

:: Вывод списка cmd-файлов
DIR C:\*.cmd
 ::Передача выполнения файлу f.bat
CALL f.bat
COPY D:\*.* C:\
PAUSE

В этом случае после завершения работы файла f.bat управление вернется в первоначальный файл на строку, следующую за командой CALL (в примере это команда COPY D:\*.* C:\).

 

1.1.11. Оператор перехода GOTO

КФ может содержать метки и операторы GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается при обработке КФ как метка.  

Пример 4. Пусть имеется КФ следующего содержания:

COPY %1 %2
GOTO Label1
ECHO Эта строка никогда не выполнится
:Label1

В операторе GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего КФ.

Для перехода к метке внутри КФ кроме команды GOTO также можно использовать и рассмотренный выше оператор CALL :метка аргументы

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

 

1.1.12. Оператор проверки условия IF

С помощью оператора IF … ELSE (ключевое слово ELSE может отсутствовать) в КФ можно выполнять обработку условий двух типов. При этом если заданное после IF условие принимает истинное значение, система выполняет следующую за условием команду (или несколько команд, заключенных в круглые скобки), в противном случае выполняется команда (или несколько команд в скобках), следующие за ключевым словом ELSE – так же, как и в языках  программирования.

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

IF [NOT] строка1==строка2 команда1 [ELSE команда2]

(квадратные скобки указывают на необязательность заключенных в них параметров) или

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

Условие строка1==строка2 считается истинным при точном совпадении обеих строк. Параметр NOT указывает на то, что заданная команда выполняется лишь в том случае, когда сравниваемые строки не совпадают.

Для группировки команд могут использоваться круглые скобки. Иногда использование круглых скобок необходимо для правильной работы команды if…else – например для вывода на экран наибольшего из двух параметров, с которыми запущен КФ, следует использовать оператор

if %1 GTR %2 (echo %1  ) else (echo %2)

Строки могут быть литеральными или представлять собой значения переменных (например, %1 или %TEMP%). Кавычки для литеральных строк не требуются. Например,

IF %1==%2 ECHO Параметры совпадают!

При сравнении строк, заданных переменными, следует учитывать, что значение переменной (или параметр командной строки) может оказаться пустой строкой, и тогда выполнение КФ аварийно завершится. Поэтому при сравнении строк нужно приписывать к ним слева какой-нибудь символ, например:

IF -%MyVar%==-C:\ ECHO strings equal

С помощью команд IF и SHIFT можно в цикле обработать все параметры командной строки файла. Например, следующий КФ par.cmd  выводит на экран имя запускаемого файла и все параметры командной строки:

ECHO run: %0
:BegLoop
IF -%1==- GOTO ExitLoop
ECHO %1
SHIFT
GOTO BegLoop
:ExitLoop

Если запустить par.bat с двумя параметрами A B, на экран выведется следующая информация:

run: par.cmd
A
B

 

Рассмотрим условный оператор IF в общем виде:

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

Форма записи операторов_сравнения представлена в табл. 2.

Таблица 2. Операторы сравнения в IF

Оператор

Значение

NEQ

Не равно

LSS

Меньше

LEQ

Меньше или равно

GTR

Больше

GEQ

Больше или равно

 

 

Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Например, условие

IF /I AB==ab         будет истинным.

Второй способ использования оператора IF — это проверка существования заданного файла. Синтаксис для этого случая имеет вид:

IF [NOT] EXIST файл команда1 [ELSE команда2]

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

Пример 5.

IF -%1==- GOTO NoFileSpecified
IF NOT EXIST %1 GOTO FileNotExist
ECHO file '%1' found
GOTO :EOF
:NoFileSpecified
ECHO in commandstring found no filename
GOTO :EOF
:FileNotExist
ECHO file '%1'  not found

 

1.1.13. Организация циклов c помощью оператора цикла FOR

Для организации циклов в КФ используется оператора FOR, реализующий  функции:

  • выполнение заданной команды для всех элементов указанного множества;
  • выполнение заданной команды для всех подходящих имен файлов;
  • выполнение заданной команды для всех подходящих имен каталогов;
  • выполнение заданной команды для определенного каталога, а также всех его подкаталогов;
  • получение последовательности чисел с заданными началом, концом и шагом приращения;
  • чтение и обработка строк из текстового файла;
  • обработка строк вывода команды cmd.exe.
 Цикл FOR … IN … DO … (выполнение команды для каждого элемента множества)

Этот вариант команды FOR для КФ имеет вид:

FOR %%переменная IN (множество)  DO команда [параметры]
Параметр множество в команде FOR задает одну или более текстовых строк, которые необходимо обработать с помощью заданной команды. Строки разделяются запятыми Скобки здесь обязательны. Параметр команда [параметры] задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается. 

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

Пример 6. Вывод нескольких строк

FOR %%i IN (one, two) DO ECHO %%i

В результате выполнения КФ примера 6 на экран будут выведены две строки:

one
two

Параметр множество в команде FOR может также представлять одну или несколько групп файлов. Например, чтобы вывести на экран список всех файлов с расширениями txt или cmd, находящихся в каталоге C:\TEXT, без использования команды DIR, можно использовать сценарий следующего содержания:

FOR %%f IN (C:\TEXT\*.txt C:\TEXT\*.cmd) DO ECHO %%f >> list.txt
 Цикл FOR /D … IN … DO … (выполнение команды для подкаталогов)

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

FOR /D %переменная IN (набор) DO команда [параметры]

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

FOR /D %%d  IN (C:\*.*) DO ECHO %%d

будет получен список всех каталогов на диске C:

 Цикл FOR /R … IN … DO … (выполнение заданной команды для определенного каталога, а также всех его подкаталогов)

С помощью ключа /R можно задать рекурсию:

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

Заданная команда выполняется для каталога [диск:]путь, а также для всех подкаталогов этого пути. Если после ключа R не указано имя каталога, то выполнение команды начинается с текущего каталога. Если вместо набора указана только точка (.), то команда проверяет все подкаталоги текущего каталога. Например, если текущим является каталог C:\TEXT с двумя подкаталогами BOOKS и ARTS, то в результате выполнения КФ

FOR /R %%f IN (.) DO ECHO %%f
на экран выведутся три строки:
C:\TEXT\.
C:\TEXT\BOOKS\.
C:\TEXT\ARTS\.
Цикл FOR /L … IN … DO … (получение последовательности чисел с заданными началом, концом и шагом приращения)

Ключ /L позволяет реализовать с помощью команды FOR цикл со счетчиком, в этом случае команда имеет следующий: вид:

FOR /L % переменная IN (начало, шаг, конец) DO команда [параметры]

Тройка (начало, шаг, конец) заданная после ключевого слова IN определяет последовательность чисел с заданными началом, концом и шагом приращения, которую можно использовать в арифметических вычислениях. Например, тройка (1, 1, 3) определяет последовательность (1 2 3) 

 

Цикл FOR /F … IN … DO …  (чтение и обработка строк из текстового файла)

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

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

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

Таблица 3. Ключи команды FOR /F

Ключ

Описание

SKIP=N

Число пропускаемых при обработке строк в начале файла

DELIMS=XXX

Определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции

TOKENS=X,Y,M-N

Определение номеров подстрок, выделяемых из каждой строки файла и передаваемых для выполнения в тело цикла

При использовании ключа TOKENS=X,Y,M-N создаются дополнительные переменные. Формат M-N представляет собой диапазон подстрок с номерами от M до N. Если последний символ в строке TOKENS= является звездочкой, то создается дополнительная переменная, значением которой будет весь текст, оставшийся в строке после обработки последней подстроки.

Пример 7. КФ для разбора текстового файла myfile.txt:

IF NOT EXIST myfile.txt GOTO :NoFile
FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN (myfile.txt) DO @ECHO %%i %%j %%k
GOTO :EOF
:NoFile
ECHO myfile.txt not found!

В примере 7 во второй строке производится проверка наличия файла myfile.txt и при его отсутствии выводится сообщение. Команда FOR в третьей строке обрабатывает файл myfile.txt следующим образом:

¾    пропускаются все строки, которые начинаются с символа точки с запятой (EOL=;);

¾    вторая и третья подстроки из каждой строки передаются в тело цикла, причем подстроки разделяются пробелами (по умолчанию) и/или запятыми (DELIMS=,);

¾    в теле цикла переменная %%i используется для второй подстроки, %%j — для третьей, а %%k получает все оставшиеся подстроки после третьей.

В нашем примере переменная %%i явно описана в инструкции FOR, а переменные %%j и %%k описываются неявно с помощью ключа TOKENS=. Например, если в файле myfile.txt были записаны следующие три строки:

АА BBB CCCC, DDDDD
Е, JJ KKK
;TTTT LLLL МММММ

то в результате выполнения КФ на экран будут выведены две строки:

BBB CCCC DDDDD
JJ KKK

Замечание 1. Ключ TOKENS= позволяет извлечь из одной строки файла до 26 подстрок, поэтому запрещено использовать имена переменных, начинающиеся не с букв английского алфавита (a–z).

Замечание 2. Имена переменных i, j, k должны следовать в алфавитном порядке.

Замечание 3. Имена параметров цикла FOR являются глобальными, поэтому одновременно не может быть активно более 26 переменных.

 

Команда FOR /F позволяет обработать отдельную строку. Для этого следует ввести данную строку в кавычках вместо набора имен файлов в скобках. Строка будет обработана так, как будто она взята из файла. Например, файл следующего содержания:

FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN ("AA CC BB,GG DD") DO @ECHO %%i %%j %%k

при своем выполнении выведет

CC BB GG DD
 

Цикл FOR /F   …  IN (‘команда’)  -  (обработка строк вывода команды cmd.exe).

Для обработки строки вывода команды необходимо в скобках ввести строку вызова команды в апострофах. Строка передается для выполнения интерпретатору команд cmd.exe, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующий КФ в примере 8:

Пример 8.

ECHO Имена переменных среды:
FOR /F "DELIMS==" %%i IN ('SET') DO ECHO %%i

выведет перечень имен всех переменных среды, определенных в настоящее время в системе.

В цикле FOR допускается применение тех же синтаксических конструкций (операторов), что и для заменяемых параметров - таблица 1. Использование функции ~z показано в примере 9.

Пример 9. Вычисление суммарной длины всех файлов в заданном подкаталоге
SETLOCAL ENABLEDELAYEDEXPANSION
Set /a Size = 0  
For %%I in (%1\*.*) do set /a Size= Size + %%~zI  
Echo %Size% 
1.1.14. Циклы и связывание времени выполнения для переменных

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

Пример 10. Пусть имеется КФ, включающий команды:

SET a=
FOR %%i IN (Раз, Два, Три) DO SET a=%a%%%i
ECHO a=%a%

В результате его выполнения на экран будет выведена строка "a=Три".

Для исправления ситуации нужно, как и в случае с составными выражениями, вместо знаков процента (%) использовать восклицательные знаки и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, приведенный выше пример следует переписать следующим образом:

SETLOCAL ENABLEDELAYEDEXPANSION
SET a=
FOR %%i IN (One,Two,Three) DO SET a=!a!%%i
ECHO a=%a%

 

1.1.15. Утилита поиска строк в текстовых файлах Findstr

Назначение утилиты Findstr - поиск строк в текстовых файлах. Вызов утилиты имеет вид:

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:файл]

        [/C:строка] [/G:файл] [/D:список_папок] [/OFF[LINE]]

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

 

  /L    поиск строк дословно.

  /R    поиск строк как регулярных выражений.

  /S    поиск файлов в текущей папке и всех ее подпапках.

  /I     определяет, что поиск будет вестись без учета регистра.

  /X   печатает строки, которые совпадают точно.

  /V   печатает строки, не содержащие совпадений с искомыми.

  /N   печатает номер строки, в которой найдено совпадение, и ее содержимое.

  /M  печатает только имя файла, в которой найдено совпадение.

  /O   печатает найденный строки через пустую строку.

   /F:файл    читает список файлов из заданного файла (/ для консоли).

  /C:строка  использует заданную строку как искомую фразу поиска.

   /D:список_папок    поиск в списке папок (разделяются точкой с запятой).

  строка     искомый текст.

  [диск:][путь]имя_файла - задает имя файла или файлов.

 

Можно использовать пробелы для разделения нескольких искомых строк. Например, команда 'FINDSTR "Привет мир" a.b' ищет "Привет" или "мир" в файле a.b, а команда с ключом /C

FINDSTR /C:"Привет мир" a.b ищет строку  "Привет мир" в  файле a.b.

Утилита FindStr c ключом /R дает возможность использовать для задания шаблона поиска несложные регулярные выражения. Краткая справка по синтаксису регулярных выражений:

  .         Любой символ.

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

  ^         Позиция в строке: начало строки

  $         Позиция в строке: конец строки

  [класс]   Класс символов: любой единичный символ из множества

  [^класс]  Обратный класс символов: любой единичный символ из дополнения

[x-y]  Диапазон: любые символы из указанного диапазона, например [0-1] –двоичная цифра, [a-z] – строчная буква латинского алфавита

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

  \<xyz    Позиция в слове: в начале слова

  xyz\>    Позиция в слове: в конце слова

Пример 11. КФ для  подсчета количества строк в файле num.txt, в которых присутствует хотя бы одна двоичная цифра.

set /a kol=0

for /f %%b in ('findstr /rc:"[0-1]" num.txt') do set /a kol=kol+1

echo %kol%

 

2. МЕТОДИКА ВЫПОЛНЕНИЯ

  1. Неформально ознакомиться с теоретическими сведениями.
  2. Для подготовки текстов КФ рекомендуется использовать блокнот (Notepad),  следует избегать использования в выводимых на экран результатах работы КФ букв русского алфавита.
  3. На этапе отладки КФ следует закомментировать строки @ECHO OFF  и CLS.
  4.  Разработать и выполнить КФ, выполняющие следующие функции:

      Вывод на экран имен всех файлов с указанным расширением, находящихся в каталоге, имя которого задается при запуске КФ первым параметром. Расширение файлов задается вторым параметром. Полученный КФ должен состоять из ОДНОЙ строки.

      Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -. Использовать цикл с использованием GOTO.

      В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат. Использовать цикл FOR /D.

      В каталогах, имена которых заданы первым и вторым параметрами КФ, найти и вывести на экран имена файлов (расширения могут быть любые), присутствующих как в первом, так и во втором каталогах. Использовать один FOR и IF для проверки присутствия файла во втором каталоге.

      Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ (в командной строке). Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально допустимую величину, выводить соответствующие сообщения. Использовать FOR /L. Проверить правильность вычисленного значения факториала с помощью калькулятора.

  1. Разработать и выполнить КФ в соответствии с табл. 5.
  2. Ответить (устно) на контрольные вопросы. Устными ответами, записанными на бумаге, во время отчета бригады по выполненной работе пользоваться нельзя.

 

Таблица 5. Индивидуальные задания для студентов бригад

№№ бр.

Действия, выполняемые КФ

1

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

2. Вывод на экран списка файлов, хранящихся в указанном первым параметром командной строки каталоге и созданных в первом полугодии (месяцы 1-6) года, указанного вторым параметром КФ.

2

  1. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти файл наибольшего размера с расширением, указанным вторым параметром КФ. Вывести имя и размер файла.
  2. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти ТРИ файла самого большого размера. Вывести имена файлов, их размеры и даты создания

3

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

2. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти суммарный объем файлов, имеющих расширение, указанное вторым параметром КФ.

4

1. Удаление из каталога, заданного первым параметром, файлов, которые присутствуют и в каталоге, указанным вторым параметром. Перед удалением файлы скопировать в каталог, указанный третьим параметром КФ и заархивировать архиватором 7za.

2. В каталоге, указанном первым параметром КФ, и его подкаталогах, найти файлы, созданные во второй половине рабочего дня (после 14 часов), скопировать их в отдельный подкаталог и заархивировать архиватором 7za.

5

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

2. Проверить наличие файла Numb.txt в каталоге, указанном первым параметром КФ. В этом файле записаны целые и вещественные числа по формату одно число в строке. Прочитать целые числа из файла, найти их сумму и вывести числа и их сумму на экран. Найти количество вещественных чисел и вывести найденное значение на экран.

6

1. Среди выполняющихся на ПК программ найти и вывести на экран имя программы, использующей наибольший объем памяти

2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла FNames.txt, содержащего список имен файлов и подкаталогов. Если он есть – проверка наличия перечисленных в списке файлов и вывод имен отсутствующих. Если файла FNames нет, создание его и запись имен файлов и подкаталогов.

7

1. Вывод списка DLL (хранящихся на доступном диске), созданных до 12.2011 размером до 12000 байтов.

2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла Numbers.txt, содержащего 2 столбца целых чисел, столбцы располагаются с позиций 2 и 20 и отделены пробелами. Если файла нет – вывод сообщения. Если файл есть, создать новый файл, содержащий три столбца, в третий поместить сумму чисел из двух первых столбцов.

8

1. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: 1. создать подкаталоги с именами EXE, TXT, CMD, DOC и OTHER. 2. В каждый подкаталог скопировать файлы с соответствующими расширениями. 3. Пустые подкаталоги удалить.

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

9

1. Среди выполняющихся на ПК программ найти имена программ, запущенных системой.

2. Подсчет количества положительных и отрицательных чисел целых чисел в текстовом файле. Считать, что слова в файле записаны в формате ОДНО СЛОВО В СТРОКЕ. Имя файла задается первым параметром КФ.

10

1. Подсчет количества слов в текстовом файле, содержащем целые числа и слова русского и английского языков. Считать, что слова в файле записаны в формате ОДНО СЛОВО В СТРОКЕ. Число – это целое число, состоящее из десятичных цифр. Слово - последовательность букв латинского (или русского) алфавитов. Имя файла задается первым параметром КФ.

2. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: 1. создать подкаталоги с именами 1, 2, ..., 12.  2. В каждый подкаталог скопировать файлы, созданные в соответствующие месяцы. 3. Пустые подкаталоги удалить.

№№ бр.

Действия, выполняемые КФ

11

1. Подсчет количества строк в текстовом файле, имя которого задано первым параметром КФ. Проверить наличие указанного файла и вывести сообщение об его отсутствии.

2. Найти количество выполняющихся на ПК программ и количество пользовательских программ

12

1. Вывод на экран аргументов, с которыми КФ был запущен, число аргументов от 4 до 11. Поиск и вывод на экран минимального и максимального значений аргументов КФ. Предполагается, что все аргументы КФ – целые положительные числа. При неверном числе аргументов ничего не выполнять, сообщить об ошибке.

2. Среди выполняющихся на ПК программ найти имена программ, имеющих окна. Имена программ и названия принадлежащих им окон вывести на экран.

 

Примечание. Для решения задач можно использовать команду Findstr, если ее использование позволит упростить решение.

 

  1. ОТЧЕТ О РАБОТЕ

Готовится с помощью офисного текстового процессора один на бригаду из двух студентов. Бригада из трех студентов готовит два отчета.

В отчете должны быть приведены описания алгоритмов решения задач п.4.1 - п.4.5 и п.5, решенных каждым студентом бригады N, листинги КФ, исходные данные, использованные для тестирования КФ, и результаты выполнения КФ с приведенными исходными данными.

 

  1.   КОНТРОЛЬНЫЕ ВОПРОСЫ

 

  1. Использование параметров командной строки. Команда Shift.
  2. Операции со строковыми и числовыми переменными. Команда SET.
  3. Проверка существования заданного файла.
  4. Операторы перехода и вызова.
  5. Выполнение заданной команды для всех элементов указанного множества.
  6. Выполнение заданной команды для всех подходящих имен файлов.
  7. Выполнение заданной команды для определенного каталога, а также всех его подкаталогов.
  8. Получение последовательности чисел с заданными началом, концом и шагом приращения.
  9. Чтение и обработка строк из текстового файла.
  10. Команда Findstr. Назначение. Ключи. Использование регулярных выражений в команде. Задание и использование класса цифр и класса букв.
  11. Символы, используемые в регулярных выражениях. Правила использования.
  12. Какое минимальное количество строк (включая @echo off) должен иметь КФ, выводящий на экран минимальное значения двух числовых аргументов?
  13.  Какое минимальное количество строк (включая @echo off) должен иметь КФ, выводящий на экран минимальное значения трех числовых аргументов?
Сочинения курсовыеСочинения курсовые