选择运行PowerShell脚本时要导入的CSV

3lxsmp7m  于 2022-11-10  发布在  Shell
关注(0)|答案(3)|浏览(150)

我每周都会收到一份CSV,我们的财务团队将其放入了一个共享驱动器中。我有一个CSV的脚本,一旦我得到它,我就运行它。
当然,该脚本的第一个命令是Import-Csv
问题是,财务团队坚持每次都以不同的名称命名文件,而且他们并不总是将文件放在驱动器中的同一位置。
因此,我必须首先搜索该文件,将其放入脚本所指向的目录中,然后重命名该文件。
我试着与团队讨论将其放在相同的位置,并确保文件名相同,但他们只遵循了几个星期的说明,然后才做任何事情。
理想情况下,我希望当我运行脚本时,会有一个弹出窗口要求我选择CSV(类似于您在Office文档上执行“另存为”时的外观)。
无论如何,这要在PowerShell内完成吗?

4smxwvx5

4smxwvx51#

您可以访问.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

然后使用$CsvFile int he Import-Csv命令。
您可以更改.InitialDirectory属性以使导航更加方便。
使用.Filter属性可以将文件打开显示限制为CSV文件,以使操作更加方便。
另外,使用[Void]类可以防止状态返回(通常是‘OK’或‘Cancel’)回显到屏幕上。
注:简单地在谷歌上搜索一下就会找到很多例子。我从here提炼了一些工作。如果您想要浏览等,它还将记录一些其他属性。

bfnvny8b

bfnvny8b2#

如果您愿意接受一个看起来不如另存为对话框漂亮的选择框,您可以使用Out-Gridview。这些方面的一些东西可能会有所帮助。

$filenames =
     @(Get-ChildItem -Path C:\temp -Recurse -Filter  *.csv  |
         Sort-Object LastWriteTime -Descending |
         Out-GridView -Title 'Choose a file' -PassThru)

$csvfile = $filenames[0].FullName

Import-Csv $csvfile | More

-Path指定一个目录,该目录包含可能传递CSV文件的所有位置。这种排序只是将最近编写的文件放在网格的顶部。据推测,这会让选择变得更容易。@() Package 器只是确保存储在$filenames中的结果是一个数组。
您可以对Import-Csv的结果执行其他操作。

ct3nt3jp

ct3nt3jp3#

Steven的回答当然满足了您最初的问题,但另一种选择是让PowerShell来做这项工作。如果您知道驱动器,并且本周知道文件的名称,则可以将该名称传递给脚本,并让它搜索您需要的特定CSV文件上的驱动器过滤。使其成为递归的,并打开唯一匹配的文件。对不起,昨天没有时间包括代码。下面是一个函数,它在提供顶级搜索路径和可能带有通配符的文件名时返回完整的文件路径。

Function GFP{$Result=GCI$args[0]-Recurse-Include$args[1];Return($Result.DirectoryName+“\”+$Result.Name)}

示例:gfp“d:\rootFolder.csv”

相关问题