如何在输入路径时启用自动完成功能?

时间:2014-03-19 14:54:19

标签: powershell autocomplete user-input

回到cmd.exe,我用了

set /P file=Enter path to the file: 

从控制台输入文件路径(如果它不作为参数提供),我可以按Tab以获得路径自动完成。但是,当我在Powershell中执行时

$file = Read-Host -Prompt "Enter path to the file"

然后我不能使用Tab来获得自动完成,它只是在输入中插入一个列表。有没有办法模拟以前的行为?

3 个答案:

答案 0 :(得分:1)

我知道,我知道......不是直接回答你的问题,但仍然完全值得一提恕我直言。当你可以弹出一个打开文件对话框时,为什么要求用户键入一个路径(和错误拼写错误)?在脚本的开头删除此功能:

function Get-FileName($initialDirectory)
{   
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
    Out-Null

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialDirectory
    $OpenFileDialog.filter = "All files (*.*)| *.*"
    $OpenFileDialog.ShowDialog() | Out-Null
    $OpenFileDialog.filename
}

然后,当您需要获取文件名和路径时,您可以$file = get-filename完成它并完成它。如果您只想要某些文件类型,您可以更改过滤器行以仅允许用户查看某些类型的文件,甚至是特定的文件名(即您需要它们在硬盘驱动器上找到'computerlist.csv'或者其他内容,您可以将过滤器中的更改为computerlist.csv)。

答案 1 :(得分:0)

基于JG in SD的思路,这里给出选择文件夹的版本。

function Get-FolderPath($initialDirectory)
{   
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") > $null
    $FolderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
    $FolderBrowserDialog.SelectedPath = $initialDirectory
    $FolderBrowserDialog.ShowDialog() > $null
    $FolderBrowserDialog.SelectedPath
}

答案 2 :(得分:0)

这是JG in SD帖子的更新版本(PSVersion 5.1 和更新版本):

function Get-FileName {   
    
  param
  (
    $initialDirectory
  )
  
  $null = Add-Type -AssemblyName System.windows.forms

  $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog
  $OpenFileDialog.initialDirectory = $initialDirectory
  $OpenFileDialog.filter = 'All files (*.*)| *.*'
  $null = $OpenFileDialog.ShowDialog()
  $OpenFileDialog.filename
}