簡體   English   中英

在運行 Powershell 腳本時選擇要導入的 CSV

[英]Choose which CSV to import when running a Powershell Script

因此,我每周都會收到一份 csv,我們的財務團隊會將其放入共享驅動器中。 我有一個用於該 csv 的腳本,一旦我得到它就會運行。

腳本的第一個命令當然是 Import-Csv。

問題是,財務團隊每次都堅持以不同的方式命名文件,而且他們並不總是將其放在驅動器內的同一位置。

結果,我必須先尋找文件,將其放入腳本指向的目錄中,然后重命名文件。

我曾嘗試與團隊討論將其放在同一位置並確保文件名相同,但他們只遵循說明幾個星期,然后才開始做任何事情。

理想情況下,我希望這樣當我運行腳本時,會有一個彈出窗口要求我選擇一個 csv(類似於在 Office 文檔上執行“另存為”時的外觀)。

無論如何要在powershell中完成?

您可以訪問 .Net 類和與表單庫的接口,以實例化並從標准 FileOpen 對話框獲取輸入。 如下所示:

Using Namespace System.Windows.Forms

$FileBrowser = [OpenFileDialog]::new()
$FileBrowser.InitialDirectory = 'c:\temp'
$FileBrowser.Filter = 'Comma Separated Values (*.csv) | *.csv'
[Void]$FileBrowser.ShowDialog()

$CsvFile = $FileBrowser.FileName

然后在Import-Csv命令中使用$CsvFile

您可以更改.InitialDirectory屬性以使導航更方便一些。

使用.Filter屬性將文件打開顯示限制為 CSV 文件,讓事情變得更方便。

此外,使用[Void]類來防止狀態返回(通常是“OK”或“Cancel”)回顯到屏幕上。

注意:一個簡單的谷歌搜索會出現很多例子。 我從這里改進了一些工作。 如果您想探索等,這還將記錄一些其他屬性。

Steven 的回答肯定滿足了您最初的問題,但另一種選擇是讓 PowerShell 完成這項工作。 如果您知道驅動器,並且知道本周文件的名稱,您可以將名稱傳遞給您的腳本,讓它搜索您需要的特定 csv 文件的驅動器過濾。 使其遞歸,並打開唯一匹配的文件。 抱歉,昨天沒有時間包含代碼。 當提供頂級搜索路徑和帶有可能通配符的文件名時,這是一個返回完整文件路徑的函數。

函數 gfp { $result=gci $args[0] -recurse -include $args[1]; 返回 ($result.DirectoryName + "\" + $result.Name) }

示例: gfp "d:\rootfolder" "thisweeksfilename.csv"

如果您願意接受一個看起來不如“另存為”對話框的選擇框,您可以使用 Out-Gridview。 這些方面的東西可能會有所幫助。

$filenames =
     @(Get-ChildItem -path C:\Users\David\Documents -recurse -filter  *.csv  |
         sort-object LastWriteTime -desc |
         Out-GridView -Title 'Choose a file' -PassThru)

$csvfile = $filenames[0].Fullname

Import-csv $csvfile | more

-path 指定一個目錄,該目錄包含您的 csv 文件可能被傳送到的所有位置。 排序只是將最近寫入的文件放在網格的頂部。 據說這使選擇更容易。 "@()" 包裝器只是確保存儲在 $filenames 中的結果是一個數組。

您可以使用 import-csv 的結果做其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM