Bat язык: Руководство Batch для начинающих
«Урок bat-аники» — хорошая статья о создании bat-файлов
Есть хорошая статья в Сети, в которой приведены полезные советы по созданию все еще порой необходимых bat-файлов.
Автор и источники в статье указаны.
Автор: Алексей Александров
Источник: RSDN Magazine #2-2005
Опубликовано: 11.07.2005
Исправлено: 27.10.2005
Версия текста: 1.0
Введение
Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.
Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.
К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.
Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.
ПРЕДУПРЕЖДЕНИЕ Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к [1]. |
Как экранировать символ?
В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:
- Операторы перенаправления ввода-вывода <, >, >>.
- Оператор конвейера |.
- Операторы объединения команд ||, & и &&.
- Оператор разыменования переменной %…%.
В случае если символ, относящийся к одному из таких операторов, должен быть включен в вашу команду в его литеральном смысле, вас ждут определенные неожиданности. Например, при выполнении вот такой строки
echo The ratio should be up to 10%. |
символ процента будет «съеден» интерпретатором, который решит, что это попытка вывода значения какой-то переменной. В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа:
echo The ratio should be up to 10%%. |
после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл:
@echo off |
К сожалению, при попытке запуска этого «чуда инженерного разума» нас постигнет неудача в виде сообщения об ошибке
> was unexpected at this time. |
Оно и понятно: командный интерпретатор не в силах разобраться, где его просят вывести на экран символ HTML-тега, а где перенаправить вывод. В нормальных языках программирования эта проблема обычно решается обрамлением строковых литералов кавычками. Отчасти это помогает и в bat-файлах. Но лишь отчасти. Выполнение строки
echo "<html>" >%OUTPUTFILE% |
приведет к тому, что в выходной файл будут записаны и сами кавычки. Это явно не совсем то, что требуется.
К счастью, есть один малоизвестный способ, позволяющий добиться требуемого результата. Символ ^ позволяет экранировать любой другой символ с безусловным приоритетом. Таким образом, вышеприведенный пример генерации HTML может быть успешно записан так:
@echo off |
Таким же способом можно экранировать любой другой специальный символ. Очевидно, можно экранировать и сам ^. Не очень эстетично, зато дешево и практично. Слово «надежно» я пропустил умышленно…
Как перенести длинную строку?
Совет по поводу экранирующего символа ^ имеет еще одно применение: перенос строк. Я (как и многие из вас, наверное) люблю, чтобы любой исходный текст, который я пишу, выглядел красиво – даже *.bat-файлы. Одним из обязательных условий красоты и удобочитаемости кода для меня является его ширина: все строки должны умещаться в 78 столбцов. Можно поспорить по поводу числа 78, но в одном я непреклонен – ограничение на ширину текста кода должно быть, иначе это не код, а макароны.
Так вот долгое время *.bat-файлы портили мне жизнь тем, что иногда приходилось писать длинную строку – например, вызов какой-нибудь другой программы с кучей опций, и я не знал, что с этим делать. Происходило это нечасто, но всегда было неприятно. Но, к счастью, моя жизнь изменилась с тех пор, как я открыл для себя Супер-Символ ^:
packagebin.exe --recursive-search=yes --files-mask=exe,dll,pdb,obj ^ |
Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам.
Как определить имя каталога, в котором находится запущенный командный файл?
Иногда сценарию надо знать полный путь к себе самому и/или к каталогу, в котором он находится. Это может понадобиться по разным причинам. Например, он должен достать из системы контроля версий исходники в каталог <script-dir>/src рядом с собой. Или, запускаются тесты из каталога <script-dir>/tests, и перед их запуском надо добавить каталог <script-dir>/bin в переменную PATH.
Можно, конечно, рассчитывать на то, что командный файл был вызван из того же каталога, где он находится, и тогда в качестве вышеупомянутого <script-dir> можно использовать переменную окружения %CD% — полный путь к текущему каталогу. Однако любые допущения в нашем деле недопустимы (хороший каламбур, однако!). Поэтому приведу более надежное решение.
Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла. После этого читаем скудную документацию для команды call:
и обнаруживаем, что при использовании нумерованных переменных %0-%9 можно использовать некоторые модификаторы:
%~1 - разворачивает %1, удаляя кавычки (") |
и, более того:
Модификаторы можно объединять для получения сложных результатов: |
Таким образом, правильным будет использовать в качестве тега <script-dir> сочетание %~dp0, которое будет раскрыто в полный путь к каталогу, где находится сценарий. Например,
"%~dp0\packagebin.exe" --recursive-search=yes --files-mask=exe,dll,pdb,obj ^ |
Обратите внимание на использование кавычек – потенциально каталог может иметь в своем пути пробел. Кавычки избавят от проблем в этом случае.
ПРЕДУПРЕЖДЕНИЕ Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. Однако возможны неожиданности. Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие. В тот день я узнал, что такое System Restore… |
Как получить короткое (8.3) имя файла?
«А зачем? – спросите вы – Ведь мы живем в мире Интернета, Web-сервисов и NTFS с длинными именами файлов». Это действительно так, но иногда встречаются программы, которые отчаянно сопротивляются прогрессу, и в частности, не любят имен файлов и полных путей с пробелами. Одной из таких программ, кстати, является утилита build.exe из Windows DDK… В таких ситуациях спасает использование короткого, «беспробельного» DOS-имени для файла.
ПРЕДУПРЕЖДЕНИЕ Доступ к файлу по короткому имени может быть не всегда возможен. На файловой системе NTFS создание коротких псевдонимов для файлов может быть отключено путем установки в единицу значения «NtfsDisable8dot3NameCreation» в ключе реестра «HKEY_LOCAL_MACHINE\System\CurrentContro |
Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 — %9 можно использовать префикс
%~s1 - expanded path contains short names only |
который нам как раз мог бы помочь. Но есть засада – все эти полезные префиксы нельзя использовать с произвольной переменной окружения, а присваивание переменным %0 — %9 не поддерживается. К счастью, описываемые префиксы можно еще использовать с переменными цикла for, и это дает нам способ достичь требуемого результата. Например, вот так можно получить 8.3-путь к “Program Files”:
for /d %%i in ("%PROGRAMFILES%") do ( |
Этот и другие модификаторы можно использовать и с любой другой формой цикла for, подробнее о которых можно узнать из:
Как перенаправить стандартный вывод в файл?
Плоха та короткая программа, которая не стремится стать большой. К сожалению, это правило применимо и к командным файлам Windows тоже – иногда bat-файлы вырастают до довольно больших размеров. Если при этом результат выполняемых команд должен журналироваться, то все становится совсем плохо – почти каждая строка имеет хвостик типа
echo Cleaning up the target directory >>%LOGFILE% |
Гораздо проще было бы перенаправить стандартный вывод в файл, чтобы все команды echo и вообще, все, что выводится на экран, автоматически попадали в журнальный файл. Сделать это можно следующим образом (рассмотрим на знакомом примере генерации HTML-файла):
@echo off |
Здесь делается то же, что и раньше, но с перенаправлением стандартного вывода в файл out.html. Делается это простым способом – перезапуском сценарием самого себя. Сначала проверяется, не установлена ли переменная окружения STDOUT_REDIRECTED. Если она установлена, значит, сценарий уже перезапущен с перенаправленным выводом и можно просто продолжить работу. Если же переменная не установлена, то мы ее устанавливаем и перезапускаем скрипт (cmd.exe /c %0) с таким же набором параметров, что и исходная команда (%*) и перенаправленным в файл стандартным выводом (>%OUTPUT%). После завершения выполнения «перенаправленной» команды выходим.
Такое «единовременное» перенаправление имеет и еще один неочевидный плюс: файл открывается и закрывается только один раз, и всем командам и дочерним процессам передается дескриптор уже открытого файла. Во-первых, это чуть-чуть улучшит производительность (жизнь удалась – сроду бы не подумал, что буду когда-нибудь писать о производительности в bat-файлах). Во-вторых, это поможет избежать проблемы с невозможностью открыть файл для записи. Такое может случиться, если после выполнения одной из команд останется «висеть» какой-нибудь процесс. Он будет держать дескриптор интересующего нас файла и перенаправление вывода в этот файл для всех последующих команд провалится. Проблема может показаться надуманной, но однажды она украла у меня 2 часа жизни…
Как сложить два числа?
Краткий ответ – смотри:
Длинный ответ таков. В bat-файлах можно производить довольно-таки продвинутые вычисления – продвинутые не в сравнении с другими языками, а в сравнении с отсутствием возможности что-либо вычислить вообще. Вычисление осуществляется командой set, если она выполняется с ключом /a. Поддерживается практически полный набор операторов языка C, включая шестнадцатеричный модификатор 0x. Переменные окружения в выражении не обязательно заключать в знаки процента – все, что не является числом, считается переменной. Подробнее – все-таки в man set, тьфу, то есть в set /?. А здесь напоследок – просто несколько примеров.
@echo off |
Язык интерпретатора Cmd.exe. Командные файлы .bat Windows статьи
Вывод сообщений и дублирование команд
По умолчанию команды пакетного файла перед исполнением выводятся на экран, что выглядит не очень эстетично. С помощью команды ECHO OFF можно отключить дублирование команд, идущих после нее (сама команда ECHO OFF при этом все же дублируется). Например,
REM Следующие две команды будут дублироваться на экране … DIR C:\ ECHO OFF REM А остальные уже не будут DIR D:\
Для восстановления режима дублирования используется команда ECHO ON. Кроме этого, можно отключить дублирование любой отдельной строки в командном файле, написав в начале этой строки символ @, например:
ECHO ON REM Команда DIR C:\ дублируется на экране DIR C:\ REM А команда DIR D:\ — нет @DIR D:\
Таким образом, если поставить в самое начало файла команду
@ECHO OFF
то это решит все проблемы с дублированием команд.
В пакетном файле можно выводить на экран строки с сообщениями. Делается это с помощью команды
ECHO сообщение
Например,
@ECHO OFF ECHO Привет!
Команда ECHO. (точка должна следовать непосредственно за словом «ECHO») выводит на экран пустую строку.
Часто бывает удобно для просмотра сообщений, выводимых из пакетного файла, предварительно полностью очистить экран командой CLS.
Используя механизм перенаправления ввода/вывода (символы > и >>), можно направить сообщения, выводимые командой ECHO, в определенный текстовый файл. Например:
@ECHO OFF ECHO Привет! > hi.txt ECHO Пока! >> hi.txt
С помощью такого метода можно, скажем, заполнять файлы-протоколы с отчетом о произведенных действиях. Например:
@ECHO OFF REM Попытка копирования XCOPY C:\PROGRAMS D:\PROGRAMS /s REM Добавление сообщения в файл report.txt в случае REM удачного завершения копирования IF NOT ERRORLEVEL 1 ECHO Успешное копирование >> report.txt
Использование параметров командной строки
При запуске пакетных файлов в командной строке можно указывать произвольное число параметров, значения которых можно использовать внутри файла. Это позволяет, например, применять один и тот же командный файл для выполнения команд с различными параметрами.
Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*. При этом вместо %0 подставляется имя выполняемого пакетного файла, вместо %1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а вместо %* — все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то «лишние» переменные из %1 – %9 замещаются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat следующего содержания:
@ECHO OFF CLS ECHO Файл %0 копирует каталог %1 в %2 XCOPY %1 %2 /S
Если запустить его из командной строки с двумя параметрами, например
copier.bat C:\Programs D:\Backup
то на экран выведется сообщение
Файл copier.bat копирует каталог C:\Programs в D:\Backup
и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.
При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 — пустая строка.
Рассмотрим пример. Пусть командный файл 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 – пустые строки.
При включении расширенной обработки команд SHIFT поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9.
Например, в следующей команде:
SHIFT /2
параметр %2 заменяется на %3, %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.
Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0), который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.
В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в следующей таблице:
Операторы | Описание |
---|---|
%~Fn | Переменная %n расширяется до полного имени файла |
%~Dn | Из переменной %n выделяется только имя диска |
%~Pn | Из переменной %n выделяется только путь к файлу |
%~Nn | Из переменной %n выделяется только имя файла |
%~Xn | Из переменной %n выделяется расширение имени файла |
%~Sn | Значение операторов N и X для переменной %n изменяется так, что они работают с кратким именем файла |
%~$PATH:n | Проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %n заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку. Естественно, здесь переменную PATH можно заменить на любое другое допустимое значение |
Данные синтаксические конструкции можно объединять друг с другом, например:
%~DPn — из переменной %n выделяется имя диска и путь,
%~NXn — из переменной %n выделяется имя файла и расширение.
Рассмотрим следующий пример. Пусть мы находимся в каталоге C:\TEXT и запускаем пакетный файл с параметром Рассказ.doc (%1=Рассказ.doc). Тогда применение операторов, описанных в таблице выше, к параметру %1 даст следующие результаты:
%~F1=C:\TEXT\Рассказ.doc %~D1=C: %~P1=\TEXT\ %~N1=Рассказ %~X1=.doc %DP1=C:\TEXT\ %NX1=Рассказ.doc
Писать bat-файлы может каждый: ru_techwriters — LiveJournal
Полезна ли эта статья? Продолжать ли мне писать про bat-файлы?
М. Острогорский, 2008
Введение
У многих технических писателей время от времени возникает необходимость автоматизировать обработку файлов. Когда-то речь идет об однократной обработке большого количества файлов, когда-то о систематическом выполнении одних и тех же действий, например, при использовании технологий DocBook или DITA). Обработка каждого файла отдельной командой, подаваемой вручную, не только отнимает время, но и приводит к трудно определяемым ошибкам, возникающим из-за естественной невнимательности оператора.
В операционной системе MS-DOS и во всех операционных системах семейства Microsoft Windows простейшим средством автоматизации обработки файлов (и каталогов) служат так называемые командные файлы. Скажем сразу, что командные файлы — не единственное средство автоматизации работы пользователя даже из числа встроенных. В операционных системах семейства Microsoft Windows, начиная с версии 98, имеется еще Windows Script(ing) Host. Кроме того, никто не запрещает нам использовать в этих целях какой-нибудь интерпретируемый язык, скажем, Perl, Python или Ruby. Однако перечисленные средства, хотя и мощны, требуют умения программировать, т.е. составлять и, что немаловажно, отлаживать программы, хотя бы на неплохом любительском уровне. Использование же командных файлов доступно всякому без особенной подготовки, вполне достаточно внимательности и здравого смысла.
Важное замечание. Полный справочник или даже добросовестно составленный учебник по командам MS-DOS и разработке командных файлов должен был бы описывать многочисленные нюансы, связанные с использованием различных параметров, особенностями работы командных файлов в разных версиях Microsoft Windows и т.д. и т.п. Предлагаемая статья не претендует на полноту изложения, в частности:
— мы не будем описывать разные способы достижения одного и того же результата;
— мы не будем описывать все возможности и варианты применения упоминаемых команд.
Сейчас наша задача в том, чтобы помочь начать осваивать командные файлы тем, кто полностью или почти незнаком с этим инструментом. Обо всех деталях потом можно будет прочитать в фирменной документации или в справочниках.
Командный процессор
В состав многих операционных систем, в том числе, разработанных корпорацией Microsoft, входит командный процессор. Так называется программа, которая инициирует выполнение всевозможных действий в ответ на команды, вводимые пользователем с клавиатуры. В основном эти действия заключаются в запуске нужных программ с теми или иными параметрами. Но не только; дальше мы увидим, что некоторые команды выполняются непосредственно командным процессором. В основном это те команды, которые служат для управления контекстом и последовательностью выполнения команд. Однако мы не будем особенно глубоко задумываться о природе команд, во всяком случае, без необходимости. Важнее другое: любая программа, которую технически возможно запустить из командной строки, рассматривается командным процессором как команда. Он не делает различий между «родными» командами, изначально встроенными в операционную систему, и программами, которые были установлены поверх нее.
Для того чтобы запустить командный процессор:
1. Нажмите на кнопку Пуск. На экран будет выведено главное меню.
2. Выберите в главном меню пункт Выполнить. На экран будет выведено диалоговое окно Запуск программы.
3. В поле Открыть введите строку cmd.
4. Нажмите на кнопку OK. На экран будет выведено окно командного процессора.
Командная строка и команды
Окно командного процессора в первозданном виде выглядит мрачно, и работать с ним большинству людей не очень удобно. Намного проще пользоваться файловыми менеджерами в стиле Norton Commander. В них предусмотрены как средства для быстрой навигации по файловой системе, так и срока для ввода команд.
Для того чтобы ввести команду:
1. Наберите текст команды в командной строке.
2. Нажмите на клавишу Enter.
Командный процессор и команды операционной системы описаны в эксплуатационной документации на последнюю. Эта документация частично содержится внутри самой операционной системы. Для доступа к ней предназначена команда help. По этой команде на экран выводится список доступных команд. Для того чтобы получить описание конкретной команды, в качестве параметра команда help следует указать ее имя. Командная строка, показанная на следующем листинге, выводит на экран описание команды for.
help for
Если вы попробовали ввести команду help, то наверно обратили внимание, что результат ее работы (т.н. выдача) не умещается на один экран. Та же проблема возникает с текстом описания команды for. Хорошая новость состоит в том, что выдачу можно перенаправить в файл. Командная строка, показанная на следующем листинге, формирует файл commands.txt, содержащий список всех команд MS-DOS.
help > commands.txt
Для того чтобы сформировать файл с описанием команды for, надо дать такую команду (имя выходного файла можете сделать любым).
help for > for.txt
Всего в современных операционных системах корпорации Microsoft чуть меньше 80 команд, и описать их в одной статье невозможно. Здесь мы можем только упомянуть о нескольких командах, полезных для автоматизации обработки файлов и показать, как ими пользоваться. Эти команды будут в дальнейшем использоваться в примерах. Детали вы всегда сможете уточнить по команде help или в справочнике.
copy — копирование одного или нескольких файлов;
del — удаление одного или нескольких файлов;
move — перемещение одного или нескольких файлов или каталогов;
rename (сокращенно ren) — переименование одного или нескольких файлов или каталогов;
xcopy — копирование дерева подкаталогов;
mkdir (сокращенно md) — создание каталога;
rmdir (сокращенно rd) — удаление каталога.
Одно из общих правил синтаксиса команд MS-DOS состоит в том, что при указании параметров сначала указывается источник, а котом результат. Например, если мы хотим переместить файл beer.txt из каталога box в каталог table, мы должны ввести команду, приведенную на следующем листинге.
move box\beer.txt table
Сначала что переместить, потом куда переместить.
Если мы хотим переименовать файл lena.txt в файл natasha.txt, то команда должна быть записана так, как показано ниже.
ren lena.txt natasha.txt
Сначала что переименовать, потом во что переименовать.
Текущий каталог. Абсолютные и относительные пути
При работе с файловыми командами исключительную важность приобретает понятие текущего каталога. Дело в том, что при указании файла в качестве параметра команды мы всегда используем один из двух возможных способов указания на них: либо абсолютный путь, либо относительный путь. В полном пути мы указываем все, начиная с диска (или сетевого имени компьютера), например d:\misha\box\beer.txt. Какой бы каталог ни оказался текущим в момент ввода команды, полный путь будет соответствовать одному и тому же файлу. Для относительного пути текущий каталог служит отправной точкой. Простейший случай относительного пути — имя файла. В контексте выполнения команды оно означает файл с таким именем, расположенный в текущем каталоге.
Для записи относительного пути к текущему каталогу существует условная запись . (точка). Для записи относительного пути к каталогу, в котором содержится текущий каталог, существует условная запись .. (две точки). Команда, показанная на следующем листинге, копирует все файлы из текущего каталога в каталог neighbour, расположенный рядом с ним.
copy *.* .\neighbour
Командные файлы
До сих пор, приводя примеры, мы считали, что всякий раз вводим команды вручную. При обработке большого количества файлов или при систематическом выполнении одних и тех же команд это становится обременительно. Поэтому в командном процессоре предусмотрена возможность выполнения командных файлов. Командный файл — это текстовый файл, в котором набраны команды (или хотя бы одна команда). Пример командного файла показан на следующем листинге. Попробуйте догадаться, что делает этот командный файл.
help copy > copy.help help move > move.help md msdos-help move *.help msdos-help
Если назначение этого файла остается для вас загадкой, то попробуйте в действительности создать и выполнить его. Командным файлам принято давать расширение bat. По нему файлы этого типа опознаются командным процессором. Этот файл можно назвать, например, make-help.bat.
Для того чтобы запустить командный файл:
1. Введите его имя в качестве команды. После этого командный файл будет выполнен.
В командном файле каждая команда занимает одну строку. Точнее, существует способ расположить одну команду на нескольких подряд идущих строках, для этого непосредственно перед каждым переводом строки следует поставить символ «крышка» ^. (Необходимо, чтобы каждая «крышка» была последним символом в своей строке; после нее не должно быть пробелов и табуляций). Пример такой команды показан на следующем листинге.
if exist disser.txt ^ copy disser.txt ^ d:\science\papers\drafts\sources
Но для простоты, чтобы каждый раз не делать оговорок, мы будем считать, что в некотором смысле это одна длинная «логическая» строка.
При выполнении командного файла командный процессор просматривает его сверху вниз от первой строки к последней и выполняет команды в том порядке, в котором их обнаруживает. Выполняет он в целом их так, как если бы мы каждую из них вводили вручную. В целом, потому что некоторые команды при вводе вручную и при выполнении из командного файла ведут себя немного по-разному.
Забегая вперед, скажем, что при необходимости последовательность выполнения команд можно изменить с помощью управляющих команд (с чем может быть связана такая необходимость, вопрос отдельный).
Не путайте текущий каталог с каталогом, в котором находится запускаемый командный файл. Предположим, текущим каталогом является work, в нем находится каталог tools, а в каталоге tools хранятся командные файлы. Вы запускаете один из них командой tools\collect-images.bat. Так вот, «с точки зрения» этого командного файла, текущим каталогом все равно окажется work, а не tools.
Комментирование командного файла и его выдачи. Команды echo и rem
Командный файл, по существу, представляет собой программу, написанную на языке командного процессора операционной системы. Текст программы полагается снабжать комментариями, чтобы, вернувшись к нему некоторое время спустя, не вспоминать мучительно, для чего эта программа нужна, и как она устроена.
В системе команд MS-DOS для оформления комментариев предусмотрена команда rem. Это фиктивная команда, которая не предполагает выполнения каких бы то ни было действий, но позволяет написать в строке после своего имени произвольный текст. Причем командный процессор не воспринимает его как синтаксическую ошибку. Пример оформления командного файла комментариями показан на следующем листинге.
rem ***************************************************** rem Формирование файлов справки по командам copy и move rem ***************************************************** rem Формируем файлы справки help copy > copy.help help move > move.help rem Создаем каталог для хранения файлов справки md msdos-help rem Перемещаем файлы справки в подготовленный каталог move *.help msdos-help
Обратите внимание на пустые строки, которыми командный файл разбит на «абзацы». Этот простой прием позволяет сделать командный файл более читабельным.
При выполнении приведенного выше командного файла все команды будут выводиться на экран по мере их выполнения, что не всегда удобно. Выдачу команд можно отключить с помощью команды @echo off. Символ «собака» перед командой echo означает, то и сама эта команда должна выполняться в «молчаливом» режиме. С таким же успехом мы могли бы не пользоваться командной echo off, а поместить «собаку» перед каждой командой.
Во многих случаях требуется, чтобы командный файл выводил на экран (или в файл) те или иные сообщения. В одних случаях это могут быть сообщения об ошибках, в других информационные сообщения, объясняющие пользователю командного файла, что происходит в данный момент, когда-то мы формируем командным файлом какой-нибудь другой полезный файл. Для вывода сообщений применяется та же самая команда echo. В качестве параметра ей передают текст выводимого сообщения. Листинг усовершенствованного командного файла приведен ниже.
@echo off rem ***************************************************** rem Формирование файлов справки по командам copy и move rem ***************************************************** @echo Формируем файлы справки. Одну секундочку... rem Формируем файлы справки help copy > copy.help help move > move.help rem Создаем каталог для хранения файлов справки md msdos-help rem Перемещаем файлы справки в подготовленный каталог move *.help msdos-help echo Готово!
Передача командному файлу параметров
Предположим, мы хотим создать командный файл, который сначала формирует справку с описанием заданной пользователем команды, а потом загружает его для просмотра в блокнот. Фокус в том, чтобы при очередном запуске командного файла каким-то образом сообщить ему, какая именно команда нас интересует на этот раз.
Для решения этой задачи предусмотрен механизм обработки параметров. Работает он довольно просто. Если при запуске командного файла пользователь указал несколько параметров, то в тексте командного файла первый из них мы обозначаем записью %1, второй записью %2, третий записью %3 и т.д. Этими обозначениями мы пользуемся в тексте командного файла примерно так же, как в естественной речи местоимениями.
Текст командного файла, решающего поставленную задачу, приведен на следующем листинге. Обратите внимание на команду help. В качестве ее параметра ей передается первый параметр командного файла.
@echo off rem Формируем файл с описанием команды, rem имя которой передано параметром help %1 > help.tmp rem Загружаем файл описания в редактор Блокнот notepad help.tmp
Предположим, что мы присвоили этому командному файлу имя show-help.bat. Для того чтобы загрузить в блокнот описание команды, например, dir, мы должны ввести команду следующим образом.
show-help.bat dir
Следующий командный файл создает каталог с именем, указанным в первом параметре, и записывает в него файл с текстом описания команды, указанной во втором параметре.
rem Пример командного файла с двумя параметрами rem Создаем каталог с именем, заданным первым параметром md %1 rem Создаем в нем файл с описанием команды, rem заданной вторым параметром help %2 > %1\%2.help
Что произойдет, если пользователь при запуске этого командного файла укажет не два, а четыре параметра? Ничего страшного, они ничему не помешают, просто не будут использованы. А что будет, если пользователь укажет только первый параметр? Второй параметр окажется пустым. Эффект получится такой: командный файл будет выполнен, но так, как будто на месте записи %2 ничего нет. Команда help сформирует список всех команд и поместит его в файл с пустым именем и расширением.help. Если же пользователь запустить этот файл, не указав ни одного параметра, то при попытке командного процессора выполнить команду md (напомним, она предназначена для создания каталога), мы получим сообщение о синтаксической ошибке, поскольку у команды md обязательно должен быть параметр.
Таким образом, использование параметров создает большие возможности, но может существенно усложнить дело. Для того чтобы командный файл всегда работал корректно, необходимо проверять корректность указания пользователем параметров и каким-то образом реагировать на неполные или неверные входные данные. Можно, конечно, этого и не делать, но некорректно работающий командный файл может наломать дров, особенно, если он предусматривает удаление или перезапись данных.
Переменные. Команда set
Переменной называется поименованное значение. В учебниках по программированию переменную обычно сравнивают с конвертом, на котором написано имя. Внутрь конверта можно положить нечто, например, определенную сумму денег — это ее значение. Как и в случае с конвертом, значение переменной можно изменить.
Для объявления переменной и одновременно для присвоения ей значения применяется команда set. Пример записи этой команды показан на следующем листинге.
rem Компилятор хелп-файлов в формате CHM set help_compiler=c:\HTML Help Workshop\hcc.exe
Для извлечения значения переменной ее имя помещают между двумя знаками процента, как показано ниже.
rem Компилятор хелп-файлов в формате CHM set help_compiler=c:\HTML Help Workshop\hcc.exe rem Проект хелп-файла модуля "Склад" set store_hpj=help\sources\store\store.hpj rem Проект хелп-файла модуля "Продажи" set sales_hpj=help\sources\sales\sales.hpj rem Компилируем хелп-файлы %help_compiler% %store_hpj% %help_compiler% %sales_hpj%
Приведенный листинг показывает, в чем польза переменных.
Во-первых, они позволяют вместо длинного фрагмента (например, пути к компилятору хелп-файлов) использовать внутри командного файла синонимичный ему короткий. Как минимум, это удобно.
Во-вторых, они позволяют избежать повторения в тексте командного файла фрагментов, которые в дальнейшем могут меняться. Представьте себе, что мы переустановили Microsoft HTML Workshop в другой каталог. Если в командном файле для записи пути к нему применяется переменная, то будет достаточно исправить в командном файле только одну строку, а именно, ту в которой присваивается значение переменной help_compiler. Если бы мы писали путь к компилятору всякий раз, когда его необходимо взывать, то после изменения пути нам пришлось бы исправить каждую такую строку. В приведенном примере их две, но в реальном проекте их с таким же успехом может оказаться пять или пятнадцать, по числу хелп-файлов, которые мы хотим скомпилировать. Проблема не в том, что исправлять вручную каждую строчку тяжело (в конце концов, команды “copy” и “paste” никто не отменял), а в том, что это сильно повышает вероятность случайной ошибки.
Параметры командного файла тоже являются переменными, но от обычных переменных отличаются тем, что их значения задаются при запуске командного файла. В дальнейшем, говоря о переменных, в особенности о работе с их значениями, мы будем иметь в виду и параметры командного файла тоже, во всяком случае, в отсутствие явных оговорок на это счет.
При написании командных файлов часто применяют следующий прием: несколько значений переменных указывают рядом (или перемежая их какими-либо символами или строками), так, чтобы получить некоторое новое осмысленное значение. Пример приведен на следующем листинге.
rem Путь к компилятору хелп-файлов set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe" rem Путь к каталогу, в котором находятся проекты хелп-файлов set project_path=e:\work\projects\help-projects rem Вызываем компилятор для обработки конкретного проекта, rem имя которого передаем в первом параметре %help_compiler% %project_path%\%1.hpj
Проверка условий и выбор вариантов. Команды if и goto
Команда if позволяет выделять в командном файле группы команд, которые выполняются или не выполняются в зависимости от определенных условий. Для чего это нужно?
Проверка условия — почти необходимая мера при создании командных файлов, использующих параметры. Перед тем, как начинать работу, командный файл, вообще говоря, должен удостовериться в том, что ему передан корректный набор параметров. В противном случае велик риск, что он выполнится неверно или безрезультатно, а пользователю останется только гадать, в чем же проблема. Более того, если командный файл удаляет, перемещает или перезаписывает какие-либо данные, то при некорректных параметрах он может даже нанести ущерб.
На следующем листинге показан уже знакомый вам командный файл компиляции хелп-файла. В начало командного файла добавлена проверка первого параметра на непустоту. Обратите внимание на такую особенность синтаксиса: для операции сравнения используется сдвоенный знак равенства. Если первый параметр оказывается непустым, срабатывает команда goto, которая «перебрасывает» командный процессор к указанной метке. В данном случае имя этой метки compile. Обратите внимание, что там, где метка находится, ее имя предваряется двоеточием, а в команде goto нет. При пустом первом параметре командный процессор переходит к следующей строке, которая выдает сообщение об ошибке. А потом к следующей, которая перебрасывает его в самый конец файла к метке с именем finish.
@echo off rem Проверяем, задан ли параметр if not "%1"=="" goto compile rem Если параметр пуст, выдаем сообщение об ошибке echo Не указано имя проекта хелп-файла rem и переходим в конец командного файла rem к метке finish goto finish rem Это метка с именем compile :compile rem Ниже расположены команды компиляции rem Путь к компилятору хелп-файлов set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe" rem Путь к каталогу, в котором находятся проекты хелп-файлов set project_path=e:\work\projects\help-projects rem Вызываем компилятор для обработки конкретного проекта, rem имя которого передаем в первом параметре %help_compiler% %project_path%\%1.hpj rem Это метка с именем finish :finish
Скажем прямо, предложенный способ проверки параметра не самый удачный.
Во-первых, если пользователь по ошибке укажет в качестве параметра имя несуществующего файла, командный файл этим удовлетворится и предпримет попытку компиляции. Более правильный способ — проверить, существует ли такой файл в действительности. Для этого в языке команд MS-DOS предусмотрено специальное слово exist. Поэтому лучше было бы написать: if exist %1.hpj goto compile.
Во-вторых, активное использование команды goto (т.н. безусловного перехода) и меток сильно запутывают код. Технически они ничем не плохи, но отлаживать и сопровождать командный файл, написанный в таком стиле, довольно неудобно. Поэтому программисты издавна считают безусловный переход приемом нежелательным. Ниже показан более правильный, с точки зрения стиля программирования, структурированный вариант, в котором используется конструкция if…else. Работает она так: если условие истинно, выполняются команды в скобках после if, а если ложно, то в скобках после else.
@echo off rem Проверяем, задан ли параметр if not exist %1.hpj ( rem Если параметр пуст, выдаем сообщение об ошибке echo Такого проекта хелп-файла не существует. ) else ( rem Ниже расположены команды компиляции rem Путь к компилятору хелп-файлов set help_compiler="c:\Program Files\HTML Help Workshop\hhc.exe" rem Путь к каталогу, в котором находятся проекты хелп-файлов set project_path=e:\work\projects\help-projects rem Вызываем компилятор для обработки конкретного проекта, rem имя которого передаем в первом параметре %help_compiler% %project_path%\%1.hpj )
Обратите внимание на отступы от левого края. Они необязательны, но делают текст командного файла более читабельным.
Приведем еще один пример работы с проверками. Следующий командный файл создает каталог с именем help-files (предположим, для выгрузки в него скомпилированных хелп-файлов). При этом, если каталог с таким именем уже существует (и в нем, вероятно, находятся старые хелп-файлы, которые не хотелось бы терять: вдруг новые окажутся хуже?), командный файл присваивает ему расширение bak. Но если каталог help-files.bak уже существовал, то командный файл его удаляет (будем считать, что одной резервной копии нам хватит).
if exist help-files.bak rd help-files.bak if exist help-files ren help-files help-files.bak md help-files
Массовая обработка файлов. Команда for
Команда for позволяет организовать выполнение повторяющихся однотипных действий. Можно использовать ее для того, чтобы вывести на экран числа от одного до десяти, как показано на следующем листинге.
for /l %%i in (1,1,10) do echo %%i
Переменная i называется счетчиком цикла. В силу своеобразия синтаксиса команды for, имя счетчика цикла должно состоять из одной буквы. Причем, если мы пишем командный файл, то перед именем счетчика цикла надо поставить сдвоенный знак процента, если же мы просто набираем команду в командной строке, то одиночный.
Логика работы этой команды такова. После слова in указан диапазон изменения счетчика цикла. В данном варианте команды это тройка чисел: начальное значение счетчика, шаг счета, предельное значение счетчика. При выполнении команды командный процессор сначала присвоит переменной i значение 1, а потом на каждом шаге цикла будет увеличивать его на 1, пока оно не превысит 10. Очевидно, таких шагов получится десять. Если бы в качестве шага счета мы указали число 2, то цикл выполнился бы пять раз. На каждом шаге цикла выполняется тело цикла, написанное после слова do. В приведенном примере это команда echo, которая выводит на экран текущее значение счетчика цикла.
Наверно можно придумать ситуацию, когда что-то подобное на самом деле требуется, но обычно команда for используется для перебора и обработки файлов. Надо сказать, что в достаточно простых случаях массовая обработка файлов выполняется с помощью подстановочных символов. Если, мы хотим всем файлам в текущем каталоге заменить расширение .htm на .html, мы вводим команду ren *.htm *.html. Но если то же самое надо сделать не в одном каталоге, а в дереве каталогов, то без команды for не обойтись. Приведенный ниже командный файл выполняет эту операцию для всех htm-файлов в подкаталоге website текущего каталога. Точнее, во всем дереве каталогов, которое находится внутри website.
for /r website %%i in (*.htm) do ren %%i %%~ni.html
Ключ /r указывает на необходимость обхода каталога website и всех его внутренностей. Если его не указать (но тогда и каталог указывать не разрешается), то обработаны будут только файлы в текущем каталоге. Диапазоном значений счетчика цикла в данном варианте команды является множество всех файлов с расширением .htm, находящихся внутри каталога (точнее, дерева) website. Странная на первый взгляд запись ~ni означает, что из значения переменной i требуется выделить только имя файла. В языке команд MS-DOS предусмотрено несколько таких модификаторов, например, запись ~хi обозначает расширение файла. Все модификаторы описаны в справке по команде for.
Тело цикла может состоять из нескольких команд, заключенных в скобки.
@echo off for /r website %%i in (*.htm) do ( rem Выводим имя файла echo %%i rem Переименовываем файл ren %%i %%~ni.html )
Передача управления другому командному файлу. Команда call
Существует возможность вызвать из одного командного файла другой командный файл. Для этого служит команда call. Замечательно, переменные, заданные в вызывающем командном файле «видны» вызванному. И наоборот, по
The Bat! — официальный сайт
Самый защищенный и эффективный клиент электронной почты для Windows
Главными задачами почтовой программы The Bat! являются: сохранение конфиденциальности переписки, удобство и экономия времени при работе с почтой.
Почтовый агент The Bat! защитит вашу информацию различными методами, в том числе шифрованием данных пользователя на жёстком диске и шифрованием трафика при помощи протоколов SSL/TLS. The Bat! позволяет сохранить тайну переписки, так как может работать без использования глобальных поставщиков услуг электронной почты и веб-интерфейса. Таким образом, ваши письма хранятся на вашем компьютере, а не в облачных хранилищах, где могут быть доступны посторонним лицам.
The Bat! позволяет работать с неограниченным числом почтовых ящиков, обрабатывать и хранить неограниченное количество писем. The Bat! — это самый лучший почтовый клиент — лёгкий, быстрый и удобный!
Основные возможности программы
Поддержка PGP, GnuPG и S/MIME
Эффективная система сортировки писем
Внутренний модуль просмотра HTML писем
Автономная адресная книга The Bat!
Безопасная работа с прикреплёнными файлами
Удобная система шаблонов
Выборочное скачивание писем
Встроенная поддержка RSS-каналов
Другие возможности для защиты данных и повышения производительности
Главное окно программы
Вы можете сами настроить вид окна под собственные требования: установить пропорциональные размеры дерева папок, списка сообщений и текстовой области, настроить панели инструментов.
Окно редактора
Адреса отправителей и получателей представлены в развернутом виде. Введенные данные заносятся в «историю адресов» с возможностью последующего выбора из выпадающего списка.
Система фильтров
Сортировщик писем упорядочит вашу корреспонденцию и автоматизирует часто выполняемые действия.
Адресная книга
Удобный способ хранения адресов и информации о ваших корреспондентах. В The Bat! можно создать несколько адресных книг.
Операционные системы
Почтовый клиент The Bat! сертифицирован для Windows 10 64-бит, но вы можете установить нашу почтовую программу и в более ранних операционных системах, начиная с Windows XP: Windows Vista, Windows 7, Windows 8.
На работе и дома
Доступны две версии программы The Bat!: Professional и Home. Чтобы использовать портативный почтовый клиент для Windows — программу-почтовик The Bat! Voyager, необходимо приобрести лицензию The Bat! Professional.
THE BAT!
Professional Edition
Коммерческое и некоммерческое использование
The Bat Voyager бесплатно!
Шифрование почтовой базы
Биометрическая аутентификация
Аппаратная аутентификация
30-дневный испытательный период
Купить
THE BAT!
Home Edition
Некоммерческое использование
30-дневный испытательный период
Купить
Язык летучих мышей — Инфогалактика: ядро планетарного знания
Летучие мыши (также Баци , Бацби , Бацб , Бацав , Цова-Туш ) — это язык меньшинства летучих мышей, европеоид группа, и является частью нахской семьи кавказских языков. В 1975 году в нем было от 2500 до 3000 говорящих.
Есть только один диалект. Он существует только как разговорный язык, так как летучие мыши используют грузинский как письменный язык.Этот язык не является взаимно понятным ни с чеченским, ни с ингушским, двумя другими членами нахской семьи.
История
До середины XIX века цовцы жили в Тушетии, горном районе Северо-Восточной Грузии. Ожидалось, что они поселились с людьми тушей в середине столетий, позже ассимилировались с другими народами тушей и теперь известны как одна из четырех подгрупп тушей. Цовское ущелье в Тушетии населяли четыре общины летучих мышей: Сагирта, Отелта, Моцарта и Индурта.Позже они поселились на Кахетинской равнине, в селе Земо-Алвани, где живут до сих пор. В административном отношении они являются частью Ахметинского района Грузии.
Классификация
Летучие мыши принадлежат к нахской семье языков Северо-Восточного Кавказа.
Географическое распределение
Большинство носителей летучих мышей проживают в селе Земо-Алвани на Кахетинской равнине Ахметинского района Грузии. Есть несколько семей летучих мышей в Тбилиси и других крупных городах Грузии.
Фонология
Гласные
Летучие мыши имеют типичную треугольную систему из пяти гласных с контрастом между коротким и длинным (за исключением и , у которого нет длинной формы). Летучие мыши также имеют несколько дифтонгов: ei , ui , oi , ai , ou и au . [3] Все гласные и дифтонги имеют назальные аллофоны, которые являются результатом фонетических и морфофонемных процессов; это представлено надстройкой n , как и в kʼnateⁿ boy- GEN .
Согласные
Летучие мыши имеют относительно типичный набор согласных для северо-восточного кавказского языка. В отличие от своих близких родственников, чеченцев и ингушей, летучие мыши сохранили боковой фрикативный звук / ɬ /.
Грамматика
Этот раздел требует расширения. (сентябрь 2012 г.) |
Первая грамматика летучих мышей — Über die Soch-Sprache — была составлена немецким востоковедом Антоном Шифнером (1817–1879), превратив ее в первую грамматику любого из коренных кавказских языков, основанную на надежных научных принципах. [5]
Класс существительных
Традиционный анализ утверждает, что у летучих мышей существует восемь классов существительных, что является наибольшим числом среди языков Северо-Восточного Кавказа, однако более поздний анализ дает только пять классов. [4] Этот анализ (в отличие от анализа Лака) дает группировку, показанную ниже:
Этикетка | Sg. | пл. | Описание | Члены |
---|---|---|---|---|
M | v | б | человек мужского пола | мар «муж» ʕuv «пастырь» voħ «сын» |
F | Дж | д | человек женского пола | nan «мать» pstʼu «жена» joħ «дочь» |
D | д | д | различные | бадер «ребенок» kʼuit’ĭ «кот» dokʼ «сердце» ditx «мясо» |
Bd | б | д | животных | carkʼ «зуб» maiqĭ «хлеб» qʼar «дождь» |
Дж | Дж | Дж | различные | pħu «собака» ča «медведь» matx «sun» |
* Bd / J | б | Дж | частей тела (15 существительные) | бак «кулак» barkʼ «глаз» čʼqʼempʼŏ «горло» |
* Д / Дж | д | Дж | частей тела (4 существительные) | batʼr «губа», larkʼ «ухо» tʼotʼ «рука», čʼamaǧ «щека» |
* Б / Б | б | б | только 3 существительных | бораг «Тапочки вязаные» čekam «сапожок» kakam «осенняя шерсть» |
Согласно этому анализу, три дополнительных класса являются примерами инкрустированного пола , где количество предметов, демонстрирующих такое поведение, недостаточно для создания независимой группировки.Кроме того, они могут быть объяснены как изменяющиеся, поскольку один класс в единственном числе, а другой во множественном числе, например группа B / B соглашается, как если бы она принадлежала к классу Bd в единственном числе, но мужскому человеческому классу во множественном числе.
Падежи существительных
Batsbi использует всего девять падежей существительных, хотя в большинстве существительных эргативный и инструментальный падеж имеют общую форму.
Ящики | Особое число | Множественное число | Особое число | Множественное число |
---|---|---|---|---|
Номинативный | некр. | некʼи | кокосовый | кокули |
Родительный падеж | nekʼe n | некча н. | колпачок n | cokʼla n |
Дательный | neken | некр. | коклен | кокёлин |
Ergative, Инструментальная | неклев | неклив | cokʼlev | кокиль |
Обращение | нек’экс | nekax | cokʼlex | коклакс |
Allative | nekʼegŏ | nekʼigŏ | cokʼlegŏ | cokʼligŏ |
Нареч. | nekʼeǧ | nekʼiǧ | кубиков | cokʼliǧ |
Commitive | nekci n , nekeci n | nekʼici n | cokʼleci n | cokʼlici n |
«нож» | «лисица» |
Цифры
Как и у большинства его родственников, числа Батсби являются десятичными, с общим основанием 20.Это в основном очевидно при построении старших декад, так что 40 šauztʼqʼ образовано из 2 × 20 и 200 icʼatʼqʼ равно 10 × 20. [4] При изменении именных чисел числительное предшествует изменяемому существительному.
|
|
В летучих мышах, как и в его ближайших родственниках чеченском и ингушском, число Dʕivʔ «четверка» фактически начинается с маркера класса существительного, представленного как D (по умолчанию или другой заглавной буквы для другого классы).Этот маркер будет соответствовать классу номинала, который изменяет число, даже если этот номинал не выражен открыто, а только очевиден в прагматическом или дискурсивном контексте, как в Vʕivʔev «четыре (мужчины)» . Это видно в самом слове «четыре» , а также в его производных.
Глаголы
Летучие мыши имеют явные склонения для агентивности глагола; он делает различие между , так как Я упал (т.е.е. не по моей вине) и , так что горе Я упал (т.е. это была моя собственная вина).
Список литературы
- ↑ Летучие мыши на Этнолог (18-е изд., 2015)
- ↑ Нордхофф, Себастьян; Хаммарстрём, Харальд; Форкель, Роберт; Haspelmath, Мартин, ред. (2013). «Летучие мыши». Glottolog . Лейпциг: Институт эволюционной антропологии Макса Планка.
- ↑ HG1994 [ требуется полное цитирование ]
- ↑ 4.0 4,1 4,2 Холиски, Ди Энн и Гагуа, Русудан, 1994. «Цова-Туш (Бацби)», в Коренные языки Кавказа Том 4, Риекс Смитс, редактор. Caravan Books, стр. 147-212
- ↑ Кевин Туйт (2007). Взлет и падение и возрождение иберо-кавказской гипотезы, стр. 7-8. Historiographia Linguistica , 35 # 1.
Внешние ссылки
.
bat — Викисловарь
английский [править]
Произношение [править]
Этимология 1 [править]
Диалектный вариант (родственный диалектному шведскому natt-batta ) среднеанглийского bakke , balke , из северогерманского. Сравните старошведское natbakka , стародатское nathbakkæ (буквально «ночная хлопушка»), древнескандинавская leðrblaka (буквально «кожаная хлопушка»).
Существительное [править]
бит ( множественное число бит )
- Любые летающие млекопитающие отряда рукокрылых, обычно мелкие и ночные, насекомоядные или плодоядные.
- Летучая мышь — его звали Летучая мышь. Подобно летучей мыши , он выбрал ночное время для своей грабительской работы; как летучая мышь он ударил и исчез, нападая, бесшумно; как летучая мышь , он никогда не показывался перед лицом.
- 2012 , Suemedha Sood, (bbc.co.uk) Путешествие: Техас любит летучих мышей [sic]
- Эти млекопитающие не только приносят миллионы долларов сельскому хозяйству Техаса, но и приносят миллионы долларов туристической индустрии штата.Техас является домом для самой большой известной в мире колонии летучих мышей (в округе Комал) и самой большой в мире городской колонии летучих мышей (в Остине). Наблюдение за летучими мышами — обычное дело, при этом Департамент парков и дикой природы Техаса предлагает больше мест для просмотра летучих мышей , чем где-либо еще в США.
- (унизительно) Старая женщина.
Синонимы [править]
Производные термины [править]
терминов, полученных от летучая мышь (летающее животное)
.
WordReference Словарь американского английского для учащихся Random House © 2020
в.
Идиомы
bat 2 / bæt / USA произношение
bat 3 / bæt / USA произношение
Идиомы
-bat-, корень.
WordReference Random House Несокращенный словарь американского английского © 2020
в.т.
в.и.
летучая мышь 2
bat ′ like ′, прил.
летучая мышь 3
бат.,
Краткий английский словарь Collins © HarperCollins Publishers :: bat / bæt / n
vb (биты, биты, биты)
Этимология: староанглийская batt club, вероятно, кельтского происхождения; сравните гэльский летучая мышь , русский язык летучая мышь
Этимология: 14 век bakke , вероятно, скандинавского происхождения; сравнить Древнескандинавский ledhrblaka Кожаная заслонка, шведский диалект natt-batta night bat
Этимология: 17 век: вероятно, вариант bate² ‘ bat ‘ также встречается в этих записях (примечание: многие из них не являются синонимами или переводами): |
.
Warmup-1 Простые проблемы с прогревом, чтобы начать работу (решения доступны) | Warmup-2 Средние разминки струнных / массивных петель (доступны решения) |
String-1 Основные проблемы со строкой — без петель | Array-1 Основные проблемы с массивом — без циклов. |
Logic-1 Базовые логические головоломки — если еще && || ! | Logic-2 Головоломки логической логики среднего размера — если еще && || ! |
String-2 Medium Проблемы со строкой — 1 цикл | String-3 Проблемы со струнами сложнее — 2 петли |
Массив-2 Проблемы со средним массивом — 1 цикл | Массив-3 Более сложные задачи с массивом — 2 цикла, более сложная логика |
AP-1 AP CS Средние проблемы | Рекурсия-1 Основные задачи рекурсии |
Рекурсия-2 Более сложные проблемы рекурсии |
.