Самоучитель: Табла. Руслан Богданов. Написание батников самоучитель


Урок bat-аники



Автор: Алексей АлександровИсточник: RSDN Magazine #2-2005
Опубликовано: 11.07.2005Исправлено: 10.12.2016Версия текста: 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 set OUTPUTFILE=%1 echo<html> >%OUTPUTFILE% echo<head> >>%OUTPUTFILE% echo<title>This is a greeting page</title> >>%OUTPUTFILE% echo</head> >>%OUTPUTFILE% echo<body> >>%OUTPUTFILE% echoHello World! >>%OUTPUTFILE% echo</body> >>%OUTPUTFILE% echo</html> >>%OUTPUTFILE%

К сожалению, при попытке запуска этого "чуда инженерного разума" нас постигнет неудача в виде сообщения об ошибке

> was unexpected at this time.

Оно и понятно: командный интерпретатор не в силах разобраться, где его просят вывести на экран символ HTML-тега, а где перенаправить вывод. В нормальных языках программирования эта проблема обычно решается обрамлением строковых литералов кавычками. Отчасти это помогает и в bat-файлах. Но лишь отчасти. Выполнение строки

echo "<html>" >%OUTPUTFILE%

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

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

@echo off set OUTPUTFILE=%1 echo^<html^> >%OUTPUTFILE% echo^<head^> >>%OUTPUTFILE% echo^<title^>This is a greeting page^</title^> >>%OUTPUTFILE% echo^</head^> >>%OUTPUTFILE% echo^<body^> >>%OUTPUTFILE% echoHello World! >>%OUTPUTFILE% echo^</body^> >>%OUTPUTFILE% echo^</html^> >>%OUTPUTFILE%

Таким же способом можно экранировать любой другой специальный символ. Очевидно, можно экранировать и сам ^. Не очень эстетично, зато дешево и практично. Слово «надежно» я пропустил умышленно…

Как перенести длинную строку?

Совет по поводу экранирующего символа ^ имеет еще одно применение: перенос строк. Я (как и многие из вас, наверное) люблю, чтобы любой исходный текст, который я пишу, выглядел красиво – даже *.bat-файлы. Одним из обязательных условий красоты и удобочитаемости кода для меня является его ширина: все строки должны умещаться в 78 столбцов. Можно поспорить по поводу числа 78, но в одном я непреклонен – ограничение на ширину текста кода должно быть, иначе это не код, а макароны.

Так вот долгое время *.bat-файлы портили мне жизнь тем, что иногда приходилось писать длинную строку – например, вызов какой-нибудь другой программы с кучей опций, и я не знал, что с этим делать. Происходило это нечасто, но всегда было неприятно. Но, к счастью, моя жизнь изменилась с тех пор, как я открыл для себя Супер-Символ ^:

packagebin.exe --recursive-search=yes --files-mask=exe,dll,pdb,obj ^ --archive-type=zip --archive-level=max --deliver-method=ftp ^ --deliver-target=ftp://ftp.site.com

Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам.

Как определить имя каталога, в котором находится запущенный командный файл?

Иногда сценарию надо знать полный путь к себе самому и/или к каталогу, в котором он находится. Это может понадобиться по разным причинам. Например, он должен достать из системы контроля версий исходники в каталог <script-dir>/src рядом с собой. Или, запускаются тесты из каталога <script-dir>/tests, и перед их запуском надо добавить каталог <script-dir>/bin в переменную PATH.

Можно, конечно, рассчитывать на то, что командный файл был вызван из того же каталога, где он находится, и тогда в качестве вышеупомянутого <script-dir> можно использовать переменную окружения %CD% - полный путь к текущему каталогу. Однако любые допущения в нашем деле недопустимы (хороший каламбур, однако!). Поэтому приведу более надежное решение.

Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла. После этого читаем скудную документацию для команды call:

и обнаруживаем, что при использовании нумерованных переменных %0-%9 можно использовать некоторые модификаторы:

%~1 - разворачивает %1, удаляя кавычки (") %~f1 - разворачивает %1 в полный квалифицированный путь %~d1 - разворачивает %1 в букву диска %~p1 - разворачивает %1 в путь %~n1 - разворачивает %1 в имя файла %~x1 - разворачивает %1 в расширение файла %~s1 - развернутый путь будет содержать только короткие имена %~a1 - разворачивает %1 в атрибуты файла %~t1 - разворачивает %1 в дату/время создания файла %~z1 - разворачивает %1 в размер файла %~$PATH:1 - Ищет в каталогах, перечисленных в переменной среды PATH, и разворачивает %1 в полное квалифицированное имя первого совпадения. Если имя перменной среды не определено, или если файл не найден, этот модификатор вернет пустую строку

и, более того:

Модификаторы можно объединять для получения сложных результатов: %~dp1 - разворачивает %1 в букву диска и путь %~nx1 - разворачивает %1 в имя файла с расширением %~dp$PATH:1 – ищет %1 в каталогах, перечисленных в переменной среды PATH, и разворачивает в букву диска и путь к первому найденному файлу. %~ftza1 - разворачивает %1 в строку, подобную DIR

Таким образом, правильным будет использовать в качестве тега <script-dir> сочетание %~dp0, которое будет раскрыто в полный путь к каталогу, где находится сценарий. Например,

"%~dp0\packagebin.exe" --recursive-search=yes --files-mask=exe,dll,pdb,obj ^ --archive-type=zip --archive-level=max --deliver-method=ftp ^ --deliver-target=ftp://ftp.site.com --deliver-source="%~dp0\bin"

Обратите внимание на использование кавычек – потенциально каталог может иметь в своем пути пробел. Кавычки избавят от проблем в этом случае.

ПРЕДУПРЕЖДЕНИЕ

Опасайтесь бездумного применения команды 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\CurrentControlSet\Control\FileSystem».

Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 - %9 можно использовать префикс

%~s1 - expanded path contains short names only

который нам как раз мог бы помочь. Но есть засада – все эти полезные префиксы нельзя использовать с произвольной переменной окружения, а присваивание переменным %0 - %9 не поддерживается. К счастью, описываемые префиксы можно еще использовать с переменными цикла for, и это дает нам способ достичь требуемого результата. Например, вот так можно получить 8.3-путь к “Program Files”:

for /d %%i in ("%PROGRAMFILES%") do ( set PROGRAMFILESSHORT=%%~si ) echo8.3-имя для каталога "%PROGRAMFILES%" -^> "%PROGRAMFILESSHORT%"

Этот и другие модификаторы можно использовать и с любой другой формой цикла for, подробнее о которых можно узнать из:

Как перенаправить стандартный вывод в файл?

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

echo Cleaning up the target directory >>%LOGFILE% ... echoThe target directory has been cleaned >>%LOGFILE%

Гораздо проще было бы перенаправить стандартный вывод в файл, чтобы все команды echo и вообще, все, что выводится на экран, автоматически попадали в журнальный файл. Сделать это можно следующим образом (рассмотрим на знакомом примере генерации HTML-файла):

@echo off set OUTPUT=out.html if "%STDOUT_REDIRECTED%" == "" ( set STDOUT_REDIRECTED=yes cmd.exe /c %0 %* >%OUTPUT% exit /b %ERRORLEVEL% ) echo^<html^> echo^<head^> echo^<title^>This is a greeting page^</title^> echo^</head^> echo^<body^> echoHello World! echo^</body^> echo^</html^>

Здесь делается то же, что и раньше, но с перенаправлением стандартного вывода в файл out.html. Делается это простым способом – перезапуском сценарием самого себя. Сначала проверяется, не установлена ли переменная окружения STDOUT_REDIRECTED. Если она установлена, значит, сценарий уже перезапущен с перенаправленным выводом и можно просто продолжить работу. Если же переменная не установлена, то мы ее устанавливаем и перезапускаем скрипт (cmd.exe /c %0) с таким же набором параметров, что и исходная команда (%*) и перенаправленным в файл стандартным выводом (>%OUTPUT%). После завершения выполнения «перенаправленной» команды выходим.

Такое «единовременное» перенаправление имеет и еще один неочевидный плюс: файл открывается и закрывается только один раз, и всем командам и дочерним процессам передается дескриптор уже открытого файла. Во-первых, это чуть-чуть улучшит производительность (жизнь удалась – сроду бы не подумал, что буду когда-нибудь писать о производительности в bat-файлах). Во-вторых, это поможет избежать проблемы с невозможностью открыть файл для записи. Такое может случиться, если после выполнения одной из команд останется «висеть» какой-нибудь процесс. Он будет держать дескриптор интересующего нас файла и перенаправление вывода в этот файл для всех последующих команд провалится. Проблема может показаться надуманной, но однажды она украла у меня 2 часа жизни…

Как сложить два числа?

Краткий ответ – смотри:

Длинный ответ таков. В bat-файлах можно производить довольно-таки продвинутые вычисления – продвинутые не в сравнении с другими языками, а в сравнении с отсутствием возможности что-либо вычислить вообще. Вычисление осуществляется командой set, если она выполняется с ключом /a. Поддерживается практически полный набор операторов языка C, включая шестнадцатеричный модификатор 0x. Переменные окружения в выражении не обязательно заключать в знаки процента – все, что не является числом, считается переменной. Подробнее – все-таки в man set, тьфу, то есть в set /?. А здесь напоследок – просто несколько примеров.

@echo off set ARG=1 remset /a RESULT=ARG + 2 echo%RESULT% remremset /a RESULT="ARG << 2" echo%RESULT% remset /a RESULT=0x1234 + 0x6786 echo%RESULT% rem

А можно создать в bat-файле функцию?

Да, можно. Более того, иногда даже нужно. Правда, функциями это можно назвать условно. Есть особый синтаксис команды call, который позволяет перейти на метку в этом же bat-файле с запоминанием места, откуда был произведен этот вызов:

call :метка аргументы

Возврат из функции производится командой:

exit /b [опциональный код возврата]

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

За подробностями обращайтесь к:

Что интересно, команда call с таким синтаксисом поддерживает рекурсивные вызовы с автоматическим созданием нового фрейма для переменных аргументов %0-%9. Иногда это может быть полезным. Вот классический пример рекурсивного подсчета факториала на командном языке:

@echo off call :factorial %1 echo %RESULT% exit remremremremrem:factorial if %1 == 0 ( set RESULT=1 exit /b ) if %1 == 1 ( set RESULT=1 exit /b ) set /a PARAM=%1 - 1 call :factorial %PARAM% set /a RESULT=%1 * %RESULT% exit /b

Пример работы:

> factorial.bat 10 3628800

Как можно избежать использования goto?

Любой хоть сколько-то осмысленный *.bat-файл длиной больше 50 строк является ярким лозунгом в поддержку работы Дейкстры «О вреде оператора goto». Мешанина из переходов вперед и назад действительно является кодом «только для записи». Можно ли что-то предпринять по этому поводу?

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

if condition goto :THEN remremgoto IF_END :THEN remrem:IF_END

Но к счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения меток. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):

if condition ( remrem) else ( remrem)

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

@echo off set BUILDMODE=%1 if "%BUILDMODE%" == "" ( echoFAIL: Аргумент является обязательным ^(--debug, --release^)exit /b 1 ) remset BUILDMODE=%BUILDMODE:-=% if "%BUILDMODE%" == "debug" ( echoINFO: Устанавливаем debug-режим окруженияset CCFLAGS=/Od /MDd /Z7 ) else ( echoINFO: Устанавливаем release-режим окруженияset CCFLAGS=/O2 /MD )

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

if "%BUILDMODE%" == "debug" ( echoINFO: Устанавливаем debug-режим окружения set OPTFLAGS=/Od set CCFLAGS=%OPTFLAGS% /MDd /Z7 ) else ( echoINFO: Устанавливаем release-режим окружения set OPTFLAGS=/O2 set CCFLAGS=%OPTFLAGS% /MD )

Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.

Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды

setlocal enabledelayedexpansion

в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.

С учетом сказанного предыдущий «неправильный» пример может быть исправлен так:

setlocal enabledelayedexpansion remif "%BUILDMODE%" == "debug" ( echoINFO: Setting up debug mode environment set OPTFLAGS=/Od set CCFLAGS=!OPTFLAGS! /MDd /Z7 ) else ( echoINFO: Setting up release mode environment set OPTFLAGS=/O2 set CCFLAGS=!OPTFLAGS! /MD )

Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…

Но в любом случае, это гораздо лучше безумного количества меток и переходов.

Как обработать текстовый файл?

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

Для привнесения еще большей конкретики в процесс изучения зададимся целью прочитать файл с настройками следующего содержания:

buildmode=release compiler=cl.exe arch=x86

Ничего сверхъестественного – простой key=value формат с возможностью вставки Unix-style комментариев. Помочь в чтении и обработке этого файла нам сможет команда for. Ее дополнительные опции позволяют задать и разделители, и символ начала комментария, и кое-что еще. Вот командный файл, который выполняет поставленную задачу:

@echo off remremremcall :read_settings %~dp0\settings.txt || exit /b 1 remechoBuild mode : %BUILDMODE%echoCompiler : %COMPILER% echoArchitecture: %ARCH% remexit /b 0 remremremrem:read_settings set SETTINGSFILE=%1 remif not exist %SETTINGSFILE% ( echoFAIL: Файл с настройками отсутствуетexit /b 1 ) remremremremremremremremremremfor /f "eol=# delims== tokens=1,2" %%i in (%SETTINGSFILE%) do ( remremremset %%i=%%j ) exit /b 0

Обильные комментарии должны помочь легко разобраться, что к чему. За подробностями, как обычно, отошлю к:

Кстати, возможности команды for не ограничиваются чтением из файла. Возможно также чтение вывода другой команды. Например, так:

@echo off for /f "tokens=* usebackq" %%i in (`cmd.exe /c ver`) do ( set VERSION=%%i ) echo%VERSION%

Особенно меня умиляет наличие опции “usebackq”, которая делает синтаксис отдаленно похожим на юниксовый. И в стенах царства Билла есть граждане, скучающие по /bin/sh и пытающиеся хоть как-то скрасить существование свое и окружающих. Следующий совет это также косвенно подтверждает.

Что это за упомянутые ранее операторы объединения команд?

Это операторы &, && и ||. Они практически совсем не освещены в документации, но полезны в повседневности. Они позволяют объединять несколько команд в одну, т.е. примерно так:

command1 & command2 command1 && command2 command1 || command2

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

Оператор && гарантирует, что вторая команда будет выполнена только, если первая была выполнена успешно, т.е. с нулевым кодом возврата (он же %errorlevel%). Такие конструкции очень популярны в мире shell-сценариев Unix. Например:

Я был приятно удивлен, узнав, что cmd.exe тоже умеет выполнять такие конструкции. Это безопаснее и правильнее, нежели простое последовательное выполнение этих команд, и короче и проще, чем строгая проверка и обработка кодов возврата. Очень удобно при написании на скорую руку. Не менее полезен иногда и оператор ||. Суть его тоже логична – выполнить вторую команду, если первая дала сбой. Часто встречается в таких идиомах:

Если перейти в каталог sources не удастся, то будет произведен выход с кодом ошибки 1. Если же первая команда отработает нормально, то вторая выполнена не будет. Например, такая простейшая защита помогла бы в случае с cd по UNC-адресу, описанному ранее.

Можно ли написать на bat-языке серьезную программу?

Пожалуй, нет. Серьезная программа должна все-таки выглядеть серьезно. А все написанное на командном языке Windows таковым назвать можно лишь с о-о-о-чень большой натяжкой. Так что для решения более сложных задач автоматизации лучше все-таки взять что-нибудь более функциональное:

  • Perl
  • Python
  • Ruby
  • JScript / VBScript

Последние, кстати, присутствуют в Windows 2000/XP по умолчанию (с некоторыми функциональными различиями) и в целом могут считаться заменой *.bat языку. Однако сдается мне, что *.bat-файлы проживут еще очень долго.

Дай Бог, чтобы я ошибся…

Материалы по теме

  1. Windows Batch Files – Commands Reference.
  2. Windows 2000. Команды: Карманный справочник. Э. Фриш. – М.: Мир, 2003.
Эта статья опубликована в журнале RSDN Magazine #2-2005. Информацию о журнале можно найти здесь

rsdn.org

Как стать гуру поэзии. Самоучитель / Тетрадь поэтическая / Журнал

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

1. Что в имени…

Прежде, чем взяться за создание шедевров, необходимо придумать себе ёмкий и красочный псевдоним. Например, Саша Огонь. Первая часть этого псевдонима показывает, что вы парень простой (в чём прослеживается наследие Сергея Есенина — знающие люди сразу это поймут). А вторая часть характеризует само Ваше творчество, в данном случае — мощное и страстное, как пламя. Или нежно согревающее замерзшую душу читателя. Итак, мы получаем уже не просто литературный псевдоним, а целый бренд. К нему неплохо бы сразу создать сайт, который потом обязательно заполнится стихами. И главное — смело заявляйте всем, что Вы — поэт. Это охарактеризует Вас как сформировавшуюся творческую личность.

2. Выбор творческого пути

Ни в коем случае не читайте произведений других авторов, особенно классиков. Это затуманит Ваш чистый разум и лишит Ваше творческое видение самобытности. Человек, который много читает, видит мир через призму чужих мнений и теряет своё собственное.

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

3. Лексический арсенал

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

Смело сочетайте любые слова и создавайте новые выражения, даже если они будут из разных языков. Пускай это покажется кому-то речевыми ошибками — главное выразить свои чувства. И уж тем более не стоит проверять себя, пользуясь словарями и сборниками безжизненных правил. Творчество должно выходить за всякие рамки.

4. И в склад, и в лад

И рифмы, и ритм уже отжили своё, поэтому использовать их в своих стихах совершенно необязательно. Но если Ваш талант настолько велик, что строки рифмуются сами собой, то у нас есть пара советов, чтобы это получалось наиболее эффектно. Использование таких рифм, как «любовь-кровь (вновь)», «идти-найти», «свет-рассвет», «измен-перемен», «мои-твои» и т.п. сделает Ваши стихи узнаваемыми. Читатель будет встречать в них что-то знакомое и проникаться тёплыми чувствами к Вашему творчеству. Нечёткие рифмы, такие как «пыль-богинь», «судьба-никогда», «боли-моря», «живу-пелену», «давно-котов», «ничего-огород», «людей-бордель», «утихли-рифмы», «в бою-землю» и прочие, стоящие в сильном месте строфы, только усиливают надлом чувств, изображаемых в стихотворении.

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

5. А судьи кто?

Запомните: не бывает конструктивной критики. Все, кто критикует Ваши произведения, просто не способны создать что-то сами, а также постичь всю глубину Ваших мыслей и образов. Вы ни в коем случае не должны сомневаться в том, что создаёте шедевры. А раз это шедевры, то они неприкосновенны, и их нельзя исправлять.

Настоящим поэтом быть трудно, ведь их никто не понимает. Но свыше на них возложена великая миссия — донести до людей своё уникальное видение мира.

6. В добрый путь!

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

(Все примеры вымышлены и любое совпадение является случайным)

Авторы: Дарья Краева, Денис КраевФото: Шниткова Д.В.

30.11.2013

1 065

pishivstol.ru

правила мастерства Брэдбери, Паустовского и Кинга – bit.ua

Если у вас нет времени на чтение, то нет времени (и навыков) для письма, говорил Стивен Кинг. Для тех, кто хочет стать писателем, bit.ua выбрал несколько самоучителей от известных мастеров слова, с наиболее интересными и оригинальными советами и которые, помимо прочего, будут интересны как художественные произведения.

Писатели любят делиться секретами ремесла, взглядами на литературную деятельность, собственным опытом сочинительства. Кто-то дает лекции и проводит творческие семинары. Так, нобелевский лауреат Иосиф Бродский с удовольствием работал приглашенным поэтом в ряде американских и британских университетов, где преподавал, в том числе, теорию стихосложения, а самовлюбленный, брызжущий желчью Владимир Набоков долгие годы добивался профессорского места в Гарварде. Не желающие надрывать связки и разжевывать очевидное для них, встречая непонимание, а то и безразличие слушателей, выбирают другой путь – пишут книги, где рассказывают о принципах литературного труда, о вещах, важнейших для становления и развития писателя, дают советы начинающим работникам пера.

Рэй Брэдбери. Дзен в искусстве писательства

Мэтр фантастики говорил: «В наше время радость существования заключается в том, чтобы помогать подросткам отыскивать пути к новым рубежам…». Именно это он делает в «Дзене…». В написанном прекрасным художественным языком пособии, являющимся в то же время литературным манифестом автора, практические советы по созданию индивидуального стиля и сотрудничеству с издателем перемежевываются с абстрактными размышлениями о литературе, любимыми стихами Брэдбери и интересными эпизодами его биографии.

Не имеющее даже примерного определения слово «дзен» в заглавии книги, которое является отсылкой к философскому трактату «Дзен в искусстве стрельбы из лука», знакомящему Запад с дзен-буддизмом, означает, на мой взгляд, удовольствие – удовольствие, которое писатель получает от сочинительства. Автор «Марсианских хроник» и «Вина из одуванчиков» стремился научить будущих литераторов не только хорошо писать, но и любить творчество, любить так страстно, как любил его он. Книга заканчивается словами «Труд есть любовь!». Сам Брэдбери, оптимист и жизнелюб, считал, что умрет, если перестанет писать, и на протяжении многих десятилетий, вплоть до самой кончины, каждое утро начинал с работы над очередным произведением.

Главный секрет творчества в том, чтобы относиться к своим идеям, как к кошкам – просто заставьте их следовать за вами.

На русский язык переведено пока только первое эссе «Дзена в искусстве писательства», озаглавленное «Радость писать», да и его можно найти только в электронном виде.

Избранные советы:

«Прежде всего, у писателя должно быть беспокойное сердце. Писателя должно лихорадить от волнения и восторга. Если этого нет, пусть работает на воздухе, собирает персики или роет канавы; бог свидетель, для здоровья эти занятия полезней».

«Читайте те книги, которые заостряют ваше восприятие цвета, формы и мирового масштаба».

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

«Старайтесь находить для себя маленькие восторги, отыскивайте маленькие огорчения и придавайте форму тем и другим. Пробуйте их на вкус, дайте попробовать и своей пишущей машинке».

«История любого рассказа должна, таким образом, читаться как сообщение о погоде: сегодня холодно, завтра жарко. Сегодня во второй половине дня подожги дом. Завтра вылей холодную воду критики на еще тлеющие угли. Завтра будет время думать, кромсать и переписывать, но сегодня — взорвись, разлетись осколками во все стороны, распадись на мельчайшие частицы! Последующие шесть-семь черновиков будут настоящей пыткой».

«Главный секрет творчества в том, чтобы относиться к своим идеям, как к кошкам – просто заставьте их следовать за вами».

Константин Паустовский. Золотая роза

«Книга эта не является ни теоретическим исследованием, ни тем более руководством. Это просто заметки о моем понимании писательства и моем опыте», – написал в предисловии к «Золотой розе» любимый русский писатель Марлен Дитрих. В своем произведении Паустовский рассказывает о том, что герои всегда сопротивляются замыслу сочинителя, и нужно к ним прислушиваться; что носить всюду с собой записную книжку необязательно; сравнивает художника и писателя, требуя от последнего различать цвета не хуже живописца.

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

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

Избранные советы:

«Тот, кто будет заставлять себя накапливать наблюдения и носиться со своими записями («как бы чего не забыть»), конечно, наберет без разбору груды наблюдений, но они будут мертвыми. Иначе говоря, если эти наблюдения перенести из записной книжки в ткань живой прозы, то почти всегда они будут терять свою выразительность и выглядеть чужеродными кусками.

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

«Одна из основ писательства – хорошая память».

Стивен Кинг. Как писать книги. Мемуары о ремесле

Было бы даже странно, если бы такой плодовитый и успешный в финансовом отношении автор не написал руководство для начинающих литераторов. Книга состоит из двух частей: «Жизнеописание» и «Что такое писательство». В первой рассказывается о событиях жизни Кинга, сыгравших роль в формировании его как писателя, о влиянии на него творчества Говарда Лавкрафта, о последствиях автомобильной аварии, после которой он, кстати, и решил написать это произведение, и о том, почему не сдержал обещаний прекратить писать.

Во второй части книги Кинг дает практические советы молодым писателям – например, рекомендует избегать по возможности употребления наречий, делится секретами, как правильно развивать сюжет или какие черты характера должны быть у главного героя хорошей «хоррор стори», иллюстрирует наставления произведениями известных авторов и рассказами, написанными им специально для этой книги.

Если у вас нет времени на чтение, то нет времени (и навыков) для письма. Все просто.

«Как писать книги» полезна, я думаю, только тем, кто хочет писать, как Стивен Кинг. И для них она – бесценна. Произведение бесспорно вызовет интерес у почитателей творчества «короля ужасов». Стоит заметить, что очень высоко оценил книгу авторитетный и строгий кинокритик, многолетний ведущий церемонии награждения «Оскар» Роджер Эберт.

Избранные советы:

«Начинается все вот с чего: поставьте стол в углу, и каждый раз, когда принимаетесь писать, напоминайте себе, почему он не в середине комнаты. Жизнь – это не поддерживающая система для искусства. Все совсем наоборот».

«… старайтесь писать получше и помните, что писать наречия — человеческая слабость, писать «он сказал» или «она сказала» — совершенство богов».

«Если у вас нет времени на чтение, то нет времени (и навыков) для письма. Все просто».

«Читать и писать от четырех до шести часов в день. Если вы не можете найти для этого время, вы можете не ждать, что станете хорошим писателем».

bit.ua

Самоучитель: Табла. Руслан Богданов — Книги

Самоучитель по табла (5-е издание), для тех, кто хотел бы больше узнать об этом уникальном ударном инструменте, и возможно, научиться играть на нём.

Вариант без видео-иллюстраций:

Скачать самоучитель: Табла. Руслан БогдановРазмер: 4.4 МбЯзык: РусскийФормат: PDF

Вариант с видео-иллюстрациями:

Скачать самоучитель: Табла. Руслан Богданов плюс видеоиллюстрацииРазмер: 455 МбЯзык: РусскийФормат: PDF + AVI

Эта книга написана для тех, кто впервые видит (или даже ещё не видит) таблу, но хотел бы попробовать научиться играть на ней. Данный труд не претендует на академичность, скорее наоборот — автор постарался упростить восприятие всего материала насколько это возможно (даже не стал строго придерживаться терминологии).

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

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

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

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

P.P.S. Книга сохранена в формате PDF. Если Вы не знаете, какой программой открываются файлы PDF, рекомендую установить вот эту программу для чтения документов в формате PDF: STDU Viewer.

P.P.P.S. Также, Вы можете почти “вживую” поиграть на табла, с помощью программы Tabla-simulator 1.0.

dholak.ru