Смекни!
smekni.com

по Администрированию программного обеспечения На тему: «Циклы командной строки» (стр. 2 из 2)

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

Описание

%~I Расширение %I, которое удаляет окружающие кавычки ("").
%~fI Расширение %I до полного имени пути.
%~dI Замена %I именем диска.
%~pI Замена %I на путь.
%~nI Замена %I одним именем файла.
%~xI Замена %I расширением имени файла.
%~sI Замена путем, содержащим только короткие имена.
%~aI Замена %I атрибутами файла.
%~tI Замена %I временем модификации файла.
%~zI Замена %I размером файла.
%~$PATH:I Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

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

Переменная с объединенными модификаторами

Описание

%~dpI Замена %I именем диска и путем.
%~nxI Замена %I именем файла и расширением.
%~fsI Замена %I полным именем пути с короткими именами.
%~dp$PATH:I Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I именем диска и путем первого найденного файла.
%~ftzaI Замена %I строкой, аналогичной результату работы программы dir.

В приведенных выше примерах %I и PATH могут быть заменены другими допустимыми значениями. Допустимое имя переменной for прекращает %~ syntax.

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

  • Разбор строки

Конструкция for /F может быть использована непосредственно для строки. Для этого поместите параметр МножествоИменФайлов между скобками в одиночные кавычки ('МножествоИменФайлов'). Параметр МножествоИменФайлов будет воспринят как одиночная строка ввода из файла и будет разобран.

  • Разбор вывода

Команду for /F можно использовать для разбора вывода команды. Для этого поместите параметр МножествоИменФайлов между скобками в обратные кавычки. Он будет воспринят как командная строка, которая передается дочернему интерпретатору командной строки Cmd.exe, а результаты работы команды помещаются в памяти и разбираются, как если бы они являлись файлом.

Примеры

В пакетных файлах используется следующий синтаксис для команды for:

for %%переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Чтобы отобразить содержимое всех файлов, имеющих разрешение .doc или .txt, в текущем каталоге с помощью заменяемой переменной %f, введите следующую команду:

for %f in (*.doc *.txt) do type %f

В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге будет подставляться вместо переменной %f, пока не будет выведено содержимое всех файлов. Чтобы использовать данную команду в пакетном файле, следует заменить все вхождения %f на %%f. В противном случае переменная игнорируется, и отображается сообщение об ошибке.

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

for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми и/или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, "ИмяФайла"). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора.

Переменная %i объявлена явно в инструкции FOR, а %j и %k объявлены неявно с помощью tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы "z" или "Z".

Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду:

for /F "usebackq delims==" %i IN (`set`) DO @echo %i

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

А теперь рассмотрим пример, когда надо будет добавить 1000 пользователей. Вариантов несколько. Добавлять вручную долго, добавлять по 1му из командной строки тоже. Скрипт писать еще накладней, да и конфигурационный файл нужно тоже будет заполнить подробной информацией. Быстрее всего будет использовать цикл, параметрами которого будут имена 1000 пользователей.

Получим команду такого вида:

for %n in (John,Bruce,Mary,Charly,…,James) do dsadd user %n …[список прочих параметров]

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