Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Winnity — диалог выбора папки или файла из командой строки (http://forum.oszone.net/showthread.php?t=224689)

hb860 07-01-2012 23:42 1830591

Winnity — диалог выбора папки или файла из командой строки
 
Winnity — консольное приложение, показывающее диалог выбора папки или файла, которое можно использовать в командных файлах.

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

for /F "delims=" %%i in ('winnity /d') do (
dir %%i )

Пример выбора файла
Код:

for /F "delims=" %%i in ('winnity /f') do (
notepad.exe %%i )

Код:

for /F "delims=" %%i in ('winnity /d') do (set x=%%i )
echo %x%

Домашняя страница winnity

Anonymоus 08-01-2012 00:00 1830605

У вас ссылка битая, лишний httр
Цитата:

httр://http//winreview.ru/winnity-dia...

Anonymоus 08-01-2012 02:16 1830693

Сразу пустил winnity в дело - пристроил к скрипту, применяющему патчи к одной известной игре. Хотелось бы немного расширить функционал, а именно:
  • Добавить ключ, который бы разрешал множественный выбор файлов в диалоге, через зажатый ctrl, shift или выделением рамкой
  • Добавить маски файлов, к примеру, показывать и разрешать выбирать только zip файлы (естественно, хорошо бы и возможность за раз указать несколько масок для нескольких типов файлов)

hb860 08-01-2012 13:52 1830853

Это несложно.
Вопрос только, в каком виде задавать эти параметры?
Через ини-файл или через опции командной строки?

Anonymоus 08-01-2012 14:09 1830866

Лучше бы конечно через опции. Например, выбор одиночного файла /F:single, выбор нескольких /F:multi. Маски - работают только при диалоге выбора файла, для директорий это ни к чему. Например, /M "zip rar 7z"

hb860 10-01-2012 21:52 1832769

Прямо щас напишу

hb860 11-01-2012 00:25 1832849

Готово
Забирать там же
Цитата:

Usage:
winnity /d - select directory dialog
winnity /f - open file dialog
winnity /f /m - open file dialog (multi select)
winnity /f /e=*.exe - open file dialog with filter by exe extension
winnity /f "/e=*.exe *.dll *.*" - open file dialog with exe,dll and all files extensions filter

Sergey Tkachenko, http://winreview.ru
Тоже работает:
Код:

winnity /f  /m /e=*.exe

Anonymоus 11-01-2012 03:19 1832890

Благодарю за изменения, сейчас перекачаю новую версию.
UPD: Скачал, протестировал. Выбор директории работает отлично, как и в предыдущей версии. А вот с файлами что-то не так. При запуске просто с ключом /f, без /e или /m - не выводит выбранный файл, просто не пишет ничего в stdout. При запуске /f /m - дает выбрать несколько файлов, но по прежнему не выводит результата. При запуске с /f /e=*.cab фильтр не применяется, видны файлы с любыми расширениями, соответственно, можно выбрать не подходящий под фильтр. И снова не выводит результат.
ОС - Win XP SP3.
Запускал такой строкой: For /F "tokens=*" %%I In ('winnity /f') Do (Echo "%%I")

hb860 11-01-2012 08:24 1832959

Цитата:

Цитата Anonymоus
А вот с файлами что-то не так. »

Есть такое. Исправил, перекачиваем.

Цитата:

Цитата Anonymоus
При запуске с /f /e=*.cab фильтр не применяется »

Потому что в FOR надо писать так:
Код:

For /F "tokens=*" %%I In ('winnity /f "/e=*.cab"') Do (Echo "%%I")
Кавычки нужны, а то звёздочка команду смущает

Iska 11-01-2012 20:55 1833393

Вещь полезная в плане того, что после XP выкинули потребные библиотеки, а «comdlg32.ocx» требует лицензирования (хотя и есть и вполне легальный способ его задействовать). Спасибо.

Цитата:

Цитата hb860
winnity /f "/e=*.exe *.dll *.*" - open file dialog with exe,dll and all files extensions filter »

Отчего синтаксис не стандартный:
Код:

winnity /f /e="*.exe *.dll *.*"
или даже:
Код:

winnity /f /e:"*.exe *.dll *.*"
?

hb860, можете там же реализовать и поддержку GetSaveFileName? Иногда бывает нужно и такое.

Также, возможно, стоит дать возможность задавать текст заголовка диалогового окна.


2All: Вопрос — у меня под XP окно «Open File» отображается под окном командной строки/запущенного пакетного файла. У кого-либо наблюдается подобное?

ferget 11-01-2012 21:38 1833438

Цитата:

Цитата Iska
Вещь полезная в плане того, что после XP выкинули потребные библиотеки, а «comdlg32.ocx» требует лицензирования »

вот об этом по подробнее, пожалуйста

Anonymоus 11-01-2012 21:52 1833453

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

Iska 11-01-2012 23:40 1833540

ferget, hta-редактор «Simple HTML editor» из комплектов Visual Studio, Microsoft Platform SDK, либо оффлайновых версий MSDN (я случайно наткнулся и использовал именно последний вариант). Подробности обсуждения изложены в этой теме: VBS: диалоговое окно выбора файла в windows vista & 7.

Впрочем, позже, после уточнения коллеги wisgest, у меня заработал и предложенный AnvarovSR и адаптированный smaharbA вариант: VBS диалог открытия файла не работает на Windows 7.



Anonymоus, спасибо, ясно. Значит именно мне так «везёт».

hb860 28-01-2012 23:21 1846616

Цитата:

Цитата Iska
Отчего синтаксис не стандартный: »

Стандратное поведение Delphi. Велик с квадратными колёсами решил не делать, воспользовался готовым.

Цитата:

Цитата Iska
hb860, можете там же реализовать и поддержку GetSaveFileName? Иногда бывает нужно и такое.
Также, возможно, стоит дать возможность задавать текст заголовка диалогового окна. »

Я подумаю над этим.
А в каком сценарии предполагается использование GetSaveFileName?

Iska 29-01-2012 03:44 1846694

Цитата:

Цитата hb860
Стандратное поведение Delphi. Велик с квадратными колёсами решил не делать, воспользовался готовым. »

Ясно. Тогда, действительно, не стоит.

Цитата:

Цитата hb860
А в каком сценарии предполагается использование GetSaveFileName? »

Конкретное использование — например, чтобы задать имя файла для вывода. Как-то так:
Код:

for /f "delims=" %%i in ('winnity /s') do (
    if not defined sFileOut set sFileOut=%%~i
)

>>"%sFileOut%" echo 1. bla-bla-bla
>>"%sFileOut%" echo 2. bla-bla-bla

Кому? Для тех же самых людей, которые не пользуются сторонними файловыми менеджерами, чтобы, например, просто подставить полный путь к файлу параметром пакетного файла, и не любят набирать его вручную в командной строке или, например, в ответ на запрос «set /p».

P.S. Поправьте, пожалуйста, заголовок темы: «…из командной строки».

ferget 29-01-2012 05:13 1846698

диалоги xp'шные, а у меня 7

hb860 30-01-2012 10:07 1847412

ferget, ага. В 5ой делфе старое апи обёрнуто.
Iska, я попробую привернуть TSaveDialog.

lorents 02-02-2012 11:43 1849928

Добрый день!
Хотел поблагодарить на проект, действительнр нужная вешь. Так же хотел попросить сделать следующие изменеия:
1. изменить диалоговое окно выбора файлов на на более стандартное
2. когда запускаю программу, то ее значек отображется в панели пуск, рекомендую скрыть значек
3. добавить возможность изменять заголовок окна
4. расширенный набор работы со строкой тип файла. Например, в строке типа файлов указываю "Все поддерживаемые форматы" а это файлы (*.png, *.jpg)

lorents 08-02-2012 21:51 1854462

hb860 не могли бы сделать эти изменения

Цитата:

Цитата lorents
1. изменить диалоговое окно выбора файлов на на более стандартное »

предлагая изменить на такое диалоговое окно



Цитата:

Цитата lorents
2. когда запускаю программу, то ее значок отображается в панели пуск, рекомендую скрыть значок »



Цитата:

Цитата lorents
3. добавить возможность изменять заголовок окна
4. расширенный набор работы со строкой тип файла. Например, в строке типа файлов указываю "Все поддерживаемые форматы" а это файлы (*.png, *.jpg) »

5. диалоговое окно было поверх окна cmd
6. диалоговые окна на подобии Wprompt


hb860 06-04-2012 10:08 1894515

Мог бы. Времени только не хватает, поэтому вообще ничего не делал :(

бУРов 12-09-2012 14:47 1987368

Программа нужная. Только вот как окно командной строки свернуть?

Iska 12-09-2012 15:51 1987400

Цитата:

Цитата бУРов
Только вот как окно командной строки свернуть? »

Зачем?

бУРов 12-09-2012 15:56 1987411

Глаза мозолит.

Iska 12-09-2012 16:13 1987426

Не пользуйтесь пакетными файлами. Или так: Скрываем консольные окна — OSZone.net wiki.

бУРов 13-09-2012 12:16 1987875

Вот бы еще историю выбранных папок и файлов запоминала...

Iska 13-09-2012 13:43 1987921

бУРов, пишите автору, может реализует. Под Windows XP для истории папок я пользую FlashFolder.

бУРов 07-11-2012 21:18 2021096

А вот возможно ли как-то выяснить, сама winnity доступна?
Если, к примеру, в системе ее нет, то в команднике соотв. отреагировать:

for /F "delims=" %%i in ('winnity /d') do ( set DB=%%i )

Iska 08-11-2012 04:19 2021290

Реагируйте, кто ж мешает. Только, например, так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in ("winnity.exe") do set sWinnity=%%~$PATH:i

if defined sWinnity (
        echo %sWinnity%
        rem Enter your code here...
)

endlocal
exit /b 0

Есть ещё, конечно «…\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths», но, полагаю, это уже вовсе лишнее.


Время: 19:52.

Время: 19:52.
© OSzone.net 2001-