回到cmd.exe
,我用了
set /P file=Enter path to the file:
从控制台输入文件路径(如果它不作为参数提供),我可以按Tab
以获得路径自动完成。但是,当我在Powershell中执行时
$file = Read-Host -Prompt "Enter path to the file"
然后我不能使用Tab
来获得自动完成,它只是在输入中插入一个列表。有没有办法模拟以前的行为?
答案 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
}