Спрашивающий
Read-Host /?

Общие обсуждения
-
Если в командном файле присваивать значение переменной через set /p, то при выборе нужного файла работает автодополнение (TAB)
set /p file="Choose file: "
Как это сделать в PowerShell?- Изменен тип ILYA [ sie ] SazonovModerator 6 ноября 2010 г. 15:55
25 апреля 2008 г. 15:19
Все ответы
-
вы про:
Code Snippet$file = read-host "Please choose file"
или я не так понял?
28 апреля 2008 г. 11:00 -
Да, я про это. Нужно что бы работало автодополнение при проходе по файловой системе, как при Get-Location.
Выводится запрос на выбор файла и он выбирается при вводе с клавиатуры. Вручную неудобно, и чтоб избежать опечаток. И городить всякие интерактивные меню не хочется.28 апреля 2008 г. 13:13 -
Что то не понимаю я вас, у меня автодополнение и так работает в PowerShell, все настройки по умолчанию.
Если вам нужно открывать какой то файл и что бы не прописывать к нему долго путь можно воспользоватся Alias`ами
Code Snippetnew-item -path alias:file -value c:\test.txt
теперь достаточно просто написать file, а не писать c:\test.txt
Или в случае для Get-Content:
Code Snippetget-content C:\test.txt
=
Code Snippetget-content $file
28 апреля 2008 г. 13:28 -
Это надо сделать в сценарии, в скрипте. В чистой консоли автодополнение конечно работает.
Во время выполнения надо выбрать нужный файл, заранее неизвестный. Если в батнике легко это разрешить, то как это сделать в *.ps1? Не хочется вводить название файла как аргумент к скрипту, хоть это и вариант. Да и запомнить данную конструкцию на будущее.28 апреля 2008 г. 13:49 -
Это хоть возможно сделать? Все перерыл.22 мая 2008 г. 6:41
-
Возможно. Я даже в качестве ответа хотел написать соответствующий скрипт, но решил что усилия не стоят необходимости
В качестве основы можно взять например функцию автодополнения от PowerTab. Затем сделать свой аналог Read-Host'а, используя $host.ui.rawui.ReadKey() Проблема в том что придется (чтобы это было красиво и цельно) перехватывать и обрабатывать достаточно много разных клавиш: курсорные, бекспейс, делит, и т.п.
Короче IMHO не стоит секундного удовольствия.
Какая у вас глобальная задача? Может проще вызвать графический диалог открытия файла/папки?
22 мая 2008 г. 7:08Модератор -
> Может проще вызвать графический диалог открытия файла/папки?
Тогда проще первым аргументом к скрипту, просто хотелось выяснить как это сделать в PS. Но коль уж для этого нужен PowerTab + писать отдельную функцию, считывающий клавиатуру, то закрываю вопрос.
> Какая у вас глобальная задача?
В контексте топика - переделать два командных файла-фронтендов к cdimage.exe и (cd | dvd)burn.exe, которые я давно написал, в скрипт ps1, для изучения.
Батник предоставлял возможность выбора каталога с файлами, для создания iso-образа с разными опциями и его сохранения с любым именем в любой локальной папке.
Второй определял наличие CD/DVD - приводов, наличие в них болванки. Предоставлял выбрать программу для записи, выбрать iso-образ если он нужен, и выполнял типовые задачи (стереть, перезаписать, записать)
ps1 я написал, но уткнулся в проблему выбора файла (пути к файлам).
Попробую постепенно разобраться.
Всем спасибо за ответы.22 мая 2008 г. 12:36 -
01MDM написано: ps1 я написал, но уткнулся в проблему выбора файла (пути к файлам).
Тогда не надо изобретать велосипед, а просто воспользоваться имеющимися функциями PowerShell для этого. То есть указание имени файла в качестве параметра.
Вообще, если вам так уж необходима/интересна эта фишка - можете попробовать заполнить предложение на connect.microsoft.com чтобы она появилась в PoSh 2.0. Он сейчас только в CTP (Alpha), а на этой стадии подобные изменения/добавления вполне реальны. Если проголосует достаточно народу - добавить этот функционал в read-host будет не сложно. Ссылку на предложение можно думаю запостить здесь. Во всяком случае я свой голос приложу - это для меня адекватное усилие за такую мелочь
22 мая 2008 г. 12:48Модератор -
Спасибо за совет, наверное им воспoльзуюсь.
Пока придумал вот такое, может идеалогически неправильное, но работающее решение
Code Snippetfunction Get-Path {
cmd /v:on /c "set /p value=Enter value: && echo !value! 1>temp.path"
}
Get-Path
$path=(Get-Content temp.path)
Remove-Item temp.path
"$path"22 мая 2008 г. 15:21