Страница 14 из 41
Добавлено: Пн мар 08, 2010 15:49
Вахмурка
А в скриптах, как я понял, эту команду использовать нельзя, именно в силу
Без символа '<' перед командой!
Пробовал так:
Получается иконка, перечеркнутая красным, и ругань при запуске: "Скрипт должен начинаться с символа <". Хотелось бы...
Добавлено: Пн мар 08, 2010 16:31
MVV
А религия запрещает делать так?
(<exec обрабатывает команды абсолютно так же, как и командная строка ТК - вызывает функцию FsExecuteFileW)
Добавлено: Пн мар 08, 2010 16:37
Вахмурка
Я тупо забыл про команду exec - никогда ей не пользовался. Четвертый раз спасибо.
Добавлено: Вт мар 09, 2010 21:13
MVV
Я добавил автосохранение базы по таймеру в фоновом потоке с блокированием доступа к базе. Если база небольшая, или в момент сохранения с временной панелью работ не выполняется, никто ничего не должен заметить.
VirtualPanel 1.0.0.505:
+ функция автосохранения состояния с заданным интервалом времени
* корректная обработка переменных окружения в команде cd
Добавлено: Ср мар 10, 2010 08:32
GGS
MVV
Ситуация:
1. Левая панель: активная, курсор на файле
в архиве
2. Правая панель: содержимое виртуальной папки созданной командой <add
3. Копирую файл слева направо <F5>
В результате файл направо в физическую папку скопировался, но слева меня "выкидывают" из архива
Возможно ли слева остаться в архиве?
Добавлено: Ср мар 10, 2010 11:42
MVV
А-а, есть такое дело. Просто я вызываю обновление панелей ТК после операций с VP (ведь эти операции могут изменить содержимое панелей) - а ТК при обновлении панели выходит из архива.
Кстати, не забывай, что при извлечении файлов из архива в физическую папку, на которую ссылается VP, ТК вначале извлекает файлы во временную папку, а потом только VP копирует их в папку назначения (но к данной проблеме это не относится).
У кого 1.0.0.505, обновите до 1.0.0.506, там небольшой баг, из-за которого модуль может вылетать при открытии диалога конфигурации (обращение к неуказанному параметру).

Добавлено: Ср мар 10, 2010 15:45
GGS
MVV писал(а):при извлечении файлов из архива в физическую папку, на которую ссылается VP, ТК вначале извлекает файлы во временную папку, а потом только VP копирует их в папку назначения
Это я заметил по выставлению атрибута "A" на извлечённый файл, при подобной операции без VP значение остаётся как было в архиве.
Добавлено: Вс мар 14, 2010 10:12
Вахмурка
2
MVV
В-общем, мало-мальски сложные скрипты продолжают оставаться для меня китайской грамотой. При изучении справки и примеров возникли следующие вопросы:
1) Символ " . " часто употребляется, но его формат не описан (видимо, имеется в виду корень ВП);
2) После ifcond в справке идет фигурная скобка, а в примере - круглая, да еще в кавычках;
3) Что означает запись "@ %f" в примере? Ведь %f - это маска файла, а вовсе не виртуальный путь, как написано в справке.
Эти и другие вопросы встали передо мной при решении следующей задачи: удалить ссылки на все файлы, кроме index.*, от данной директории и ниже. Справиться с рекурсией я так и не смог и упростил задачу: только в текущей виртуальной папке. Пробовал по всякому, в том числе так:
Код: Выделить всё
<for %f . *.* { <ifcond { %f != index.* @ %f } { <del "%f" } }
Ответь, пожалуйста, на приведенные вопросы и подскажи, как решать задачу.
Добавлено: Вс мар 14, 2010 13:57
MVV
Здрасьте, символ точка заменяет текущую папку, как принято в виндовсах испокон времен. Корень ВП обозначается одиночным обратным слэшем.
Про скобки написано выше в мануале, но поясню еще раз - если параметр содержит пробелы, его надо заключать в кавычки, но если он содержит знак меньше, то его необходимо заключать в фигурные скобки, чтобы парсер скриптов понимал, что этот знак меньше является частью параметра, а не началом новой внутренней команды в скрипте.
После собаки в команде ifcond указывается имя файла, для которого вычисляется выражение. А %f в примере - это подстановочный символ команды for, внутри блока которой выполняется команда ifcond (какой именно символ используется в конкретной команде for, указывается в самой команде, я обычно для файлов использую %f, а для папок - %d, но если нужно использовать вложенный вызов команды for, придется использовать и другие буквы).
Сравнивать имя файла со строкой низя. В описании команды ifcond указано, какие можно использовать псевдо-константы (типа атрибутов, даты, времени и размера).
Но задача отрицания маски хорошая. Пожалуй, я добавлю для команды for флаг отрицания маски, или же возможность сопоставления имени текущего файла маске в выражении команды ifcond (скорее всего, это будет оператор вида like "index.*") - этот вариант мне кажется более широким в функциональном плане.
Добавлено: Вс мар 14, 2010 15:46
Вахмурка
символ точка заменяет текущую папку
Слабо себе представляю, как это используется. В батниках все просто: если не указан путь, предполагается текущий, иначе играем двумя точками (материнская директория) или слешем (корень). Про точку слышу впервые. Ну что же, благодаря тебе расширил свой кругозор.
Корень ВП обозначается одиночным обратным слэшем
...как и корень обычного диска.
если он содержит знак меньше, то его необходимо заключать в фигурные скобки
Ты думаешь, я не читал справку? Нет там этого. До чего-то приходится допирать, набивая шишки, до чего-то не допирается

%f в примере - это подстановочный символ команды for, внутри блока которой выполняется команда ifcond (какой именно символ используется в конкретной команде for, указывается в самой команде
Это тоже аналогично батникам.
В описании команды ifcond указано, какие можно использовать псевдо-константы (типа атрибутов, даты, времени и размера).
...но в явном виде запрета на имена файлов нет. Одна из проблем состоит в том, что отчасти твой язык напоминает батники, а в чем-то сильно отличен от него - ведь в батниках использовать условия типа
можно с огромным нашим удовольствием.
Пожалуй, я добавлю для команды for флаг отрицания маски
Хорошо бы все-таки достичь функциональности батниковской команды if. Тем более, что за счет вложенных скриптов можно даже структурным программированием заняться...
Добавлено: Вс мар 14, 2010 16:00
MVV
Две точки - надпапка, точка - текущая папка, бэкслэш - корневая папка. В ТК, если в командной строке написать точку и нажать ентер, откроется текущая папка - самый быстрый способ открыть её.
Это тоже аналогично батникам.
Ну дык откуда драл=)
Батовая команда if куда ограниченнее, чем моя ifcond.

Сделать сравнение строк будет непросто, т.к. вычислитель выражения оперирует с числами, а тут вдруг на те, строки. Так что будете довольствоваться функцией like "<маска>" для проверки имени, или его отрицанием, если таковое нужно.
На всяк случай поясняю, как работает вычислитель: строится массив-выражение, содержащий операторы и числа, при построении псевдо-константы расширяются до значений, а также вычисляются операторы (пока он один - like). Далее, вычисляется значение выражения. Так что, выражение !like "index.*" истинно только в том случае, когда имя файла (только имя, без пути) не соответствует маске.
VirtualPanel 1.0.0.510 (изменения после 1.0.0.505):

+ оператор like для команды ifcond, позволяющий проверять, удовлетворяет ли имя файла маске
* обновление панели-источника после операций убрано
* не запоминался флаг удаления всех файлов только для чтения
* ошибка в параметрах функции форматирования информационного окна (в 1.0.0.505)
Также добавлен пример удаления из текущей папки всех файлов кроме скриптов, mp3 и m3u:
Код: Выделить всё
<for %f . * { <ifcond { !script && !like "*.mp3" && !like "*.m3u" @ %f } { <del "%f" } }
Добавлено: Пн мар 15, 2010 20:03
MVV
Исправляю кой-какие косяки, теперь скриптами с оператором like действительно можно пользоваться (нашел баг в обработке двойного символа % в файлах скриптов). Ну и по мелочи.
VirtualPanel 1.0.0.520 (изменения после 1.0.0.510):
+ команда <exec позволяет запрашивать параметр, если он начинается с символа '?'
+ раскрываются переменные окружения в параметрах запускаемых программ
+ команда "?" отображает справку
+ если параметр имеет вид ?:"<текст>", текст используется как подсказка в окне запроса параметра
* ошибка обработки "%%" в файлах скриптов
Добавлено: Чт мар 18, 2010 18:35
MVV
Ребята, у кого есть доступ к бетам 7.51, проверьте один баг при работе с файловыми системами. Он был указан
здесь под индексом
D.
Берем, например, папку Windows (чтоб побольше), кидаем в VP. ТК на некоторое время подвисает, определяя количество файлов в папке и всё такое, потом копирует. Здесь все логично. Но если при обычном копировании юзер может нажать Esc и начать копирование без подобных расчетов, то при копировании в файловую систему - казалось бы, нажатие Esc отменяет подсчет, но после нажатия Esc при каждом вызове функции установки прогресса ТК возвращает флаг отмены юзером копирования - даже после того, как пользователь изъявил желание продолжить копирование.
Таким образом, после однократного нажатия Esc имеем запрос на прерывание операции после копирования каждого очередного файла, что, согласитесь, не айс, особенно если файлов сотня или более того.
Подумываю запостить это в баги и уверен, что исправить это элементарно, но, возможно, это уже исправлено, а доступа к приватным бетам у меня нет.
Добавлено: Чт мар 18, 2010 20:40
Avada
MVV
Это поведение не исправлено ни в 7.51, ни в 7.55. Так что можно репортить.
Добавлено: Вс мар 21, 2010 11:08
ask-rus
MVV
Спасибо за плагин! Буду рекомендовать его друзьям и знакомым.
Жаль ничем пока не могу помочь в его развитии...