2017-04-07 100 views
0

我有一個文件夾「D:\ PROD \ transfert」包含文件列表。Powershell列出文件,並讓用戶選擇一個

我想編寫一個列出文件並讓用戶選擇一個文件的Powershell腳本,然後該腳本將對所選文件執行操作。理想情況下,我希望選定文件的路徑存儲在一個變量中。

下面是輸出想要的東西:

>Select a file : 
[1] file1.zip 
[2] file2.zip 
[3] file3.zip 
> 

所有我現在可以做什麼之前上市的無號文件:

Get-ChildItem C:\PROD\transfert | % { $_.FullName } 

謝謝!

回答

5

除非你絕對需要一個控制檯界面,你可以,你可以使用Out-GridView讓用戶選擇,如:

Get-ChildItem C:\PROD\transfert | Out-GridView -Title 'Choose a file' -PassThru | ForEach-Object { $_.FullName } 

編輯 ...在一個變量來存儲。 ..

$filenames = @(Get-ChildItem C:\PROD\transfert | Out-GridView -Title 'Choose a file' -PassThru) 

@()的包裝確保總是返回的文件名的陣列(即使選擇一個文件或沒有文件)。

(在Passthru依賴於你具有的PowerShell 3或更大)

編輯2

選擇菜單下面將改變顯示類型,這取決於是否在控制檯或GUI (如ISE)。我沒有通過WinRM進行測試,但是當它通過普通的PowerShell控制檯調用時,它不應該產生GUI。

$files = Get-ChildItem -Path C:\PROD\transfert -File 
$fileChoices = @() 

for ($i=0; $i -lt $files.Count; $i++) { 
    $fileChoices += [System.Management.Automation.Host.ChoiceDescription]("$($files[$i].Name) &$($i+1)") 
} 

$userChoice = $host.UI.PromptForChoice('Select File', 'Choose a file', $fileChoices, 0) + 1 

# do something more useful here... 
Write-Host "you chose $($files[$userChoice].FullName)" 

小心怎樣的文件很多都是由Get-ChildItem

+1

雅回來了,這是一種方式,如果他不想要一個基於GUI的事情。 :) –

+0

非常感謝答案,它正在做我想做的事情。然而,這個腳本可能會用於WinRM,Out-GridView的工作嗎? – kyori

+0

不,@kyori,你需要WinRM的命令行版本。 – TechSpud

相關問題