none
Read-Host /? RRS feed

  • Общие обсуждения

  • Если в командном файле присваивать значение переменной через set /p, то при выборе нужного файла работает автодополнение (TAB)

    set /p file="Choose file: "

    Как это сделать в PowerShell?
    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 Snippet

    new-item -path alias:file -value c:\test.txt

     

    теперь достаточно просто написать file, а не писать c:\test.txt

    Или в случае для Get-Content:

    Code Snippet

    get-content C:\test.txt

     

    =

    Code Snippet

    get-content $file

     

     

    28 апреля 2008 г. 13:28
  • Это надо сделать в сценарии, в скрипте. В чистой консоли автодополнение конечно работает.
    Во время выполнения надо выбрать нужный файл, заранее неизвестный.  Если  в  батнике  легко  это  разрешить,  то как это сделать в *.ps1? Не хочется вводить название файла как аргумент к скрипту, хоть это и вариант. Да и запомнить данную конструкцию на будущее.

    28 апреля 2008 г. 13:49
  • Это хоть возможно сделать? Все перерыл.
  • Возможно. Я даже в качестве ответа хотел написать соответствующий скрипт, но решил что усилия не стоят необходимости Smile

    В качестве основы можно взять например функцию автодополнения от PowerTab. Затем сделать свой аналог Read-Host'а, используя $host.ui.rawui.ReadKey() Проблема в том что придется (чтобы это было красиво и цельно) перехватывать и обрабатывать достаточно много разных клавиш: курсорные, бекспейс, делит, и т.п.

    Короче IMHO не стоит секундного удовольствия.

    Какая у вас глобальная задача? Может проще вызвать графический диалог открытия файла/папки?

    Модератор
  • > Может проще вызвать графический диалог открытия файла/папки?

    Тогда проще первым аргументом к скрипту, просто хотелось выяснить как это сделать в PS. Но коль уж для этого нужен
    PowerTab + писать отдельную функцию, считывающий клавиатуру, то закрываю вопрос.

    > Какая у вас глобальная задача?

    В контексте топика - переделать два командных файла-фронтендов  к  cdimage.exe  и (cd | dvd)burn.exe, которые я давно написал, в скрипт ps1, для изучения.

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

    Второй определял
    наличие CD/DVD - приводов, наличие в них болванки. Предоставлял выбрать  программу  для записи, выбрать iso-образ если он нужен, и выполнял типовые задачи (стереть, перезаписать, записать)

    ps1 я написал, но уткнулся в проблему выбора файла (пути к файлам).

    Попробую постепенно разобраться.

    Всем  спасибо за  ответы.

  •  01MDM написано:

    ps1 я написал, но уткнулся в проблему выбора файла (пути к файлам).

     

    Тогда не надо изобретать велосипед, а просто воспользоваться имеющимися функциями PowerShell для этого. То есть указание имени файла в качестве параметра.

     

    Вообще, если вам так уж необходима/интересна эта фишка - можете попробовать заполнить предложение на connect.microsoft.com чтобы она появилась в PoSh 2.0. Он сейчас только в CTP (Alpha), а на этой стадии подобные изменения/добавления вполне реальны. Если проголосует достаточно народу - добавить этот функционал в read-host будет не сложно. Ссылку на предложение можно думаю запостить здесь. Во всяком случае я свой голос приложу - это для меня адекватное усилие за такую мелочь Smile

    Модератор
  • Спасибо за совет, наверное  им  воспoльзуюсь.

    Пока придумал  вот  такое,  может  идеалогически  неправильное,  но  работающее  решение  

    Code Snippet

    function 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"


     Переменную %value% так же можно записать куда-нибудь в реестр (reg add), не люблю временные файлы.