![](/img/trans.png)
[英]Character Limit on CSV when running import-csv powershell script
[英]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.