1

我在这里有这个脚本:

$directory = "C:\New Folder"
$counter = 1

Set-Location $directory

#Menu
Write-Host "==========" -BackgroundColor DarkGreen
Write-Host "===MENU===" -BackgroundColor DarkGreen
Write-Host "==========" -BackgroundColor DarkGreen
#Shows only .wav files and it order them
Get-ChildItem -Name -Include *.wav | ForEach-Object {Write-Host "[$counter] " -ForegroundColor Green -NoNewLine; Write-Host "$_"; $counter++}
Write-Host ""

$input = Read-Host -Prompt "Select a file from the menu"
Clear-Host
Write-Host "You have just selected: $input"

此时我想显示所选文件的名称。我怎么能这样做?

4

2 回答 2

3

我为此目的创建了我在此处描述的函数。

这可能对您的需求有点过分,但您可以使用以下代码传递一组 *.wav 文件:

Show-SimpleMenu (get-childitem *.wav).Name

请随时在GitHub或此处报告任何问题。

于 2021-04-27T20:18:56.020 回答
3

尽管已接受答案,但我将演示如何使用for循环从文件中进行选择。

我们首先必须使用Get-ChildItem如下方式收集文件:

$WavFiles = Get-ChildItem -Filter "*.wav"

请注意我不只是将其缩小到只是名称?这为我们提供了更多选项,例如,将最后写入时间添加到我们的选择菜单中,以便我们可以看到它们最后一次工作的时间。

接下来,我们将创建一个PSCustomObject来存储我们的结果,并使用一个for循环为每个文件名分配一个数字,根据我们在$WavFiles.

$(for($i=0; $i -lt $WavFiles.Count; $i++){
    [PSCustomObject]@{
        'File Name'       = "${i}: $($WavFiles.BaseName[$i])"
        'Last Write Time' = $WavFiles.LastWriteTime[$i]
            }
        }) | Out-Host

$array[3]如果您熟悉如何从数组中进行选择$WavFiles$() | Out-Host由于Read-Host在我们的对象输出之前优先显示而被添加;这是一个解决方法,您可以在此处阅读更多相关信息。

最后,我们通过分配我们将再次使用Read-Host的输入值来请求用户输入,使用它在我们的集合中分配的编号引用相应的文件$input$WavFiles

$input = Read-Host -Prompt "Select a file from the menu" Clear-Host Write-Host "You have just selected: $($WavFiles[$input])"

变量成为选择的$input数字,这就是为什么我们可以使用它来引用数组中的相应值。

这一切都像这样结合在一起:

#$directory = "C:\New Folder"
#Set-Location $directory

$WavFiles = Get-ChildItem -Filter "*.wav"
    
    $(for($i=0; $i -lt $WavFiles.Count; $i++){
        [PSCustomObject]@{
            'File Name'       = "${i}: $($WavFiles.BaseName[$i])"
            'Last Write Time' = $WavFiles.LastWriteTime[$i]
                }
            }) | Out-Host

$input = Read-Host -Prompt "Select a file from the menu"
Clear-Host
Write-Host "You have just selected: $($WavFiles[$input])"

输出:


File Name                 Last Write Time      
---------                 ---------------      
0: Eula                   3/2/2011 9:48:57 AM  
1: psversion              3/2/2011 9:48:56 AM  
2: readme                 11/6/2020 12:57:53 PM
3: ThirdPartyNoticesBySHS 2/27/2021 10:31:01 PM
4: WindowsCodecsRaw       3/18/2019 10:46:13 PM
于 2021-04-27T21:21:29.323 回答