# 2.12. Переменные в параметрах

## Содержание

1. Краткий обзор
2. Основные переменные
3. Основные суффиксы переменных
4. Нумерованный суффикс
5. Указание префикса и постфикса для каждого файла
6. Путь панели
7. Использование кавычек
8. Разделитель каталогов в конце пути
9. Список файлов
10. Суффиксы для списка файлов
11. Комбинирование суффиксов для списка файлов
12. Запуск в терминале
13. Взаимодействие
14. Прочие переменные
15. Сводная таблица со всеми переменными
16. Переменные окружения

## 1. Краткий обзор

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

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

Вот простой пример. Пользователь создал кнопку запуска IrfanView с переменной `%p`.

Когда пользователь нажмёт эту кнопку, он запустит IrfanView, а переменную `%p` Double Commander заменит выбранным в активной панели файлом.

Вот что понимается под переменными, описанными на этой странице.

Как вы увидите далее, большинство из них начинаются со знака процента `%`.

(наверх)

## 2. Основные переменные

Это основные переменные, которые могут использоваться и которые связаны с текущим выбором.

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

В качестве примера для каждой переменной мы используем файл C:\Users\UserName\Desktop\comment.png.

Основные переменные
Переменная | Что обозначает
--- | ---
%p | Полное имя файла, путь + имя файла `Пример: %p = "C:\Users\UserName\Desktop\comment.png"`
%f | Только имя файла, включая расширение `Пример: %f = "comment.png"`
%d | Только путь, без разделителя каталогов в конце `Пример: %d = "C:\Users\UserName\Desktop"`
%z | Последняя папка в пути `Пример: %z = "Desktop"`
%o | Имя файла без расширения `Пример: %o = "comment"`
%e | Расширение без точки `Пример: %e = "png"`
%v | Имя файла с относительным к текущему каталогу путём. Это сработает, если, например, вы вызвали внутреннюю команду cm_FlatView. Если мы включили вид без подкаталогов в каталоге `"C:\Users\UserName"`, то `%v` будет равно `"Desktop\comment.png"`

(наверх)

## 3. Основные суффиксы переменных

К упомянутым выше переменным из одной буквы мы можем добавить ещё одну букву, что позволит уточнить значение используемой переменной.

Для каждого примера предполагаем следующее:
В левой панели курсор стоит на файле "C:\LeftFolder\File.lft"
В правой панели – на "C:\RightFolder\File.rgh"
Активна правая панель.

Основные суффиксы
Суффикс | Что обозначает
--- | ---
s | Исходная или активная панель (независимо от того, левая или правая) `Пример: %ps = "C:\RightFolder\File.rgh"`
t | Целевая или неактивная панель (независимо от того, левая или правая) `Пример: %pt = "C:\LeftFolder\File.lft"`
l | Левая панель `Пример: %pl = "C:\LeftFolder\File.lft"`
r | Правая панель `Пример: %pr = "C:\RightFolder\File.rgh"`
p | Обе панели, сначала активная, затем пробел и далее неактивная `Пример: %pp = "C:\RightFolder\File.rgh" "C:\LeftFolder\File.lft"`
b | Обе панели, сначала левая, затем пробел и далее правая `Пример: %pb = "C:\LeftFolder\File.lft" "C:\RightFolder\File.rgh"`

(наверх)

## 4. Нумерованный суффикс

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

Для каждой строки таблицы предполагаем, что в активной панели открыт каталог "C:\temp\" и мы выделили двадцать шесть файлов с именем "FileA.txt", "FileB.txt" и т.д. до "FileZ.txt".

Нумерованный суффикс
Суффикс | Что обозначает
--- | ---
0 | Файл под курсором `Пример: %ps0 = "C:\temp\FileY.txt"`
1 | Первый выделенный файл `Пример: %ps1 = "C:\temp\FileA.txt"`
2 | Второй выделенный файл `Пример: %ps2 = "C:\temp\FileB.txt"`
3 | Третий выделенный файл `Пример: %ps3 = "C:\temp\FileC.txt"`
21 | Двадцать первый выделенный файл `Пример: %ps21 = "C:\temp\FileU.txt"`

(наверх)

## 5. Указание префикса и постфикса для каждого файла

Иногда в передаваемых исполняемому файлу параметрах необходимо что-то добавить перед именами файлов.

В некоторых случаях нужно добавить что-то до и сразу после имён файлов.

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

Для каждой строки таблицы предполагаем, что в активной панели открыт каталог "C:\Windows\Fonts" и мы выделили три файла с именами "courrier.ttf", "fixedsys.ttf" и "terminal.ttf".

Префикс и постфикс
Префикс и постфикс | Что обозначает
--- | ---
{} | Один набор фигурных скобок добавляет текст в фигурных скобках перед каждым выделенным файлом `Пример: %fs{+} = "+courrier.ttf" "+fixedsys.ttf" "+terminal.ttf"`
{}{} | Два набора фигурных скобок добавят текст в фигурных скобках соответственно до и после каждого выделенного файла `Пример: %fs{[}{]} = "[courrier.ttf]" "[fixedsys.ttf]" "[terminal.ttf]"`

(наверх)

## 6. Путь панели

Ранее мы разбирали переменные, связанные с выделенными файлами и папками.

Но мы также можем использовать переменную `%D` для выбора каталога конкретной панели.

Для выбора панели к этой переменной мы можем добавить букву из упомянутых выше основных суффиксов.

Для каждого примера предполагаем следующее:
В левой панели открыт каталог "C:\Reference"
В правой панели – "E:\Work"
Активна правая панель.

Путь панели
Переменная | Что обозначает
--- | ---
%D | Одна, без суффикса, вернёт путь активной панели `Пример: "E:\Work"`
%Ds | Каталог исходной или активной панели (независимо от того, левая или правая) `Пример: "E:\Work"`
%Dt | Каталог целевой или неактивной панели (независимо от того, левая или правая) `Пример: "C:\Reference"`
%Dl | Каталог левой панели `Пример: "C:\Reference"`
%Dr | Каталог правой панели `Пример: "E:\Work"`
%Z | Одна, без суффикса, вернёт имя последней папки в пути активной панели `Пример: "Work"`
%Zs | Имя последней папки в пути активной панели (независимо от того, левая или правая) `Пример: "Work"`
%Zt | Имя последней папки в пути неактивной панели (независимо от того, левая или правая) `Пример: "Reference"`
%Zl | Имя последней папки в пути левой панели `Пример: "Reference"`
%Zr | Имя последней папки в пути правой панели `Пример: "Work"`

(наверх)

## 7. Использование кавычек

Как вы видели ранее, DC возвращает результат, автоматически расставляя двойные кавычки.

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

Но по мере добавления новых переменных стало очевидно, что нам нужен способ получить результат без кавычек. Типичный пример: мы хотим в командной строке объединить исходное имя файла, но только имя файла без расширения, с новым расширением.

Вместо добавления новых переменных, которые возвращали бы то же самое, но без кавычек, мы можем использовать те же переменные, однако необходимо добавить в строке параметров `%"0`, чтобы заставить DC до конца строки не расставлять кавычки автоматически.

У нас есть:

`%"0` : начиная с этой позиции не брать имена файлов в кавычки
`%"1` : начиная с этой позиции автоматически брать имена в кавычки
`%"` : восстановить значение по умолчанию (автоматически расставлять кавычки)

Таблица ниже показывает примеры использования для файла с именем "Client List.mdb":

Примеры использования кавычек
Выражение | Результат
--- | ---
%o.zip | "Client List".zip
%"0%o.zip | Client List.zip
%"0"%o.zip" | "Client List.zip"
%"0"%o.zip" %"1%f | "Client List.zip" "Client List.mdb"

(наверх)

## 8. Разделитель каталогов в конце пути

Как вы видели ранее, DC возвращает путь без разделителя каталогов в конце.

Такое поведение также может быть изменено с помощью переменной.

У нас есть:

`%/0` : путь будет возвращён без разделителя каталогов в конце
`%/1` : путь будет возвращён с разделителем каталогов в конце
`%/` : восстановление значения по умолчанию (без разделителя каталогов в конце)

Следующая таблица показывает примеры использования для каталога "C:\Users\UserName\Desktop":

Разделитель каталогов в конце пути
Выражение | Результат
--- | ---
%D | "C:\Users\UserName\Desktop"
%/0%D | "C:\Users\UserName\Desktop"
%/1%D | "C:\Users\UserName\Desktop\"
%/%D | "C:\Users\UserName\Desktop"

(наверх)

## 9. Список файлов

Некоторые приложения в качестве параметра могут принимать текстовый файл со списком имён файлов.

DC предлагает нам переменные, которые создадут временный текстовый файл со списком выделенных файлов и папок.

Список файлов
Выражение | Описание
--- | ---
%L | Файл со списком полных имён выделенных файлов (путь + имя файла)
%F | Файл со списком только имён выделенных файлов, без пути
%R | Файл со списком имён выделенных файлов с относительным путём

Double Commander будет использовать системную кодировку ANSI в Windows или системную кодировку по умолчанию в Unix-подобных системах (в дистрибутивах GNU/Linux это обычно UTF-8).

(наверх)

## 10. Суффиксы для списка файлов

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

Кроме того, есть возможность выбрать для списка файлов кодировку UTF-8 или UTF-16 LE.

Суффиксы для списка файлов
Выражение | Описание
--- | ---
Q | Имена файлов в списке будут заключены в кавычки
U | Список в кодировке UTF-8
W | Список в кодировке UTF-16 LE

(наверх)

## 11. Комбинирование суффиксов для списка файлов

Вы также можете добавить ещё один суффикс, чтобы указать панель для получения списка файлов.

Возможные примеры:

Комбинирование суффиксов для списка файлов
Выражение | Описание
--- | ---
%LQt | Полные имена выделенных в целевой (неактивной) панели файлов, заключённые в кавычки
%FUs | Только имена выделенных в активной панели файлов, список в кодировке UTF-8
%RQW | Имена файлов активной панели (по умолчанию) с относительным путём, в кавычках, список в кодировке UTF-16 LE

(наверх)

## 12. Запуск в терминале

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

Для этого используется переменная `%t`.

Запуск в терминале
Выражение | Описание
--- | ---
%t0 | Запустить в терминале и закрыть его после завершения
%t1 | Запустить в терминале и оставить его открытым

(наверх)

## 13. Взаимодействие

Существуют две переменные: одна показывает окно сообщения, вторая – окно запроса со значением по умолчанию, которое позволяет изменить параметр на лету.

Взаимодействие
Выражение | Описание
--- | ---
%[сообщение] | Будет показано обычное окно сообщения с текстом между квадратными скобками
%[запрос;значение] | Будет показано окно запроса ввода параметра с его значением по умолчанию

Пример взаимодействия:

Пример взаимодействия
Выражение | Описание
--- | ---
%[Убедитесь, что ThisFile.ext закрыт!] | Перед выполнением действия будет показано окно с сообщением "Убедитесь, что ThisFile.ext закрыт!".
%[Введите значение ШИРИНЫ для преобразования изображения;1024] | Перед выполнением действия будет показано окно с текстом "Введите значение ШИРИНЫ для преобразования изображения", в поле ввода будет вставлено значение по умолчанию, 1024. Введённое пользователем значение будет подставлено в то место строки, где добавлено выражение "%[запрос;значение]".

(наверх)

## 14. Прочие переменные

В этом заключительном разделе перечислены переменные, которые ещё не были представлены.

Прочие переменные
Выражение | Описание
--- | ---
%% | Будет заменено на один символ процента %
%# | С этой позиции и до конца строки вместо % указателем переменной будет символ #
#% | Отмена предыдущего поведения: отсюда и до конца строки указателем переменной будет знак %
%? | До выполнения будет показана вся командная строка, с развёрнутыми значениями переменных.

`%%` обычно используется, если вам необходимо использовать символ % как есть: это не позволит Double Commander попытаться прочитать этот и последующие символы как переменную.

Переменная `%?` особенно полезна в процессе создания кнопки панели инструментов, позволяя убедиться, что все переменные возвращают ожидаемое значение и строка запуска с командой и всеми параметрами получается правильной.

Более того, вы можете что-то изменить в этом окне, непосредственно до запуска команды.

Это особенно полезно, если вы не уверены в параметрах, передаваемых приложению.

Иногда комбинация знака процента и буквы переменной может совпасть с системной переменной.

Например, если вы введёте `%os%ot`, ожидая объединения имён файлов в активной и неактивной панелях, вы будете удивлены, обнаружив, что это может не работать под Windows, т.к. `%os%` – системная переменная, в значении которой название операционной системы.

Таким образом, здесь полезно использовать `%#`: в данном случае вы можете ввести `%##os#ot`.

`%#` указывает DC, что с этого момента символ `#` эквивалентен символу процента, таким образом можно избежать пересечения с возможными системными переменными.

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

Далее, если потребуется, `#%` вернёт символу `%` обычное значение.

(наверх)

## 15. Сводная таблица со всеми переменными

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

Сводная таблица
Выражение | Описание
--- | ---
%p | полное, включая путь, имя файла
%f | имя файла, с расширением
%d | путь
%z | последняя папка в пути
%o | имя файла без расширения
%e | расширение файла без точки
%v | имя файла с путём, относительным к каталогу активной панели
s | суффикс для исходной (активной) панели (пример: %ps)
t | суффикс для целевой (неактивной) панели (пример: %pt)
l | суффикс для левой панели (пример: %pl)
r | суффикс для правой панели (пример: %pr)
p | суффикс для обеих панелей, активная первая, неактивная вторая (пример: %pp)
b | суффикс для обеих панелей, левая первая, правая вторая (пример: %pb)
0 | файл под курсором (пример: %ps0
1 | первый выделенный файл (пример: %ps1)
2 | второй выделенный файл, если есть (пример: %ps2)
3 | третий выделенный файл, если есть (пример: %ps3)
21 | двадцать первый выделенный файл, если есть (пример: %ps21)
{префикс} | префикс, добавляемый перед именем файла (пример: %f{+})
{префикс}{суффикс} | префикс и суффикс, добавляемые перед и после имени файла (пример: %f{[}{]})
%D | по умолчанию путь активной (исходной) панели
%Ds | путь активной (исходной) панели
%Dt | путь неактивной (целевой) панели
%Dl | путь левой панели, независимо от того, какая активна
%Dr | путь правой панели, независимо от того, какая активна
%Z | по умолчанию имя последней папки в пути активной (исходной) панели
%Zs | имя последней папки в пути активной (исходной) панели
%Zt | имя последней папки в пути неактивной (целевой) панели
%Zl | имя последней папки в пути левой панели, независимо от того, какая активна
%Zr | имя последней папки в пути правой панели, независимо от того, какая активна
%"0 | с этого места не расставлять кавычки автоматически
%"1 | с этого места автоматически расставлять кавычки
%" | восстанавливает поведение по умолчанию (автоматически расставлять кавычки)
%/0 | путь без разделителя каталогов в конце (по умолчанию)
%/1 | путь с разделителем каталогов в конце
%/ | восстанавливает поведение по умолчанию (без разделителя каталогов в конце)
%L | файл со списком выделенных файлов с полными именами (путь + имя файла)
%F | файл со списком только имён выделенных файлов
%R | файл со списком выделенных файлов с относительным путём
Q | суффикс для %L, %F или %R: взять имена файлов в кавычки
U | суффикс для %L, %F или %R: список в кодировке UTF-8
W | суффикс для %L, %F или %R: список в кодировке UTF-16 LE
%t0 | запустить в терминале и закрыть его после завершения
%t1 | запустить в терминале и оставить его открытым
%[сообщение] | показать окно сообщения с текстом из квадратных скобок
%[запрос;значение] | показать окно запроса ввода параметра с его значением по умолчанию
%% | будет заменено на символ %
%# | с этой позиции символ # будет обрабатываться как символ %
#% | отмена предыдущего поведения, символ % будет обрабатываться как префикс переменной
%? | показать командную строку перед выполнением

(наверх)

## 16. Переменные окружения

Double Commander предоставляет несколько переменных окружения:

Переменные окружения
Переменная | Описание
--- | ---
%COMMANDER_PATH% | Каталог, в котором расположен исполняемый файл Double Commander
%COMMANDER_INI% | Полное имя (путь + имя файла) основного файла конфигурации (`doublecmd.xml`)
%COMMANDER_DRIVE% | Диск, на котором расположена папка Double Commander: - Windows: буква диска (с двоеточием); - Unix-подобные системы: точка монтирования.

Мы можем использовать переменные окружения в настройках Double Commander: в именах исполняемых файлов и значков на панели инструментов, именах плагинов, в избранных каталогах и т.д. Это удобный способ указать путь, если мы не хотим использовать абсолютные пути.

Дополнительно доступна переменная `%DC_CONFIG_PATH%`, которая возвращает каталог с файлами конфигурации Double Commander. Это не переменная окружения и она недоступна для дочерних процессов (приложений, запущенных из программы), но в остальном мы можем использовать `%DC_CONFIG_PATH%` аналогично переменным окружения, описанным выше.

(наверх)

Originally created by Rustem (dok_rust@bk.ru)