Powershell错误,指定路径/​​驱动器的问题

时间:2017-04-21 17:02:01

标签: powershell csv path import-csv

我收到了一个奇怪的错误。当我运行下面的内容时,它会在下面给出这个错误。来自$ inputfolder的文件名是正确的,但文件路径更改了当前驱动器,而不是我定义为$ inputfolder的文件路径。这就是为什么它“无法找到文件。”

无法找到文件'C:\ path \ of \ current \ drive \ batch.csv'。

当我将.ps1移动到$ inputfolder时,它可以工作。我不知道我做错了什么。变量已定义。 同样,$ outputpath无效。 done.csv文件在输入文件夹中创建。

-*-transition

编辑:完整的错误报告;再次,“path \ of \ current \ drive”是我拥有.ps1所在文件夹的位置,即使我定义了我的变量,只有当我将.ps1移动到$ inputfolder时它才能正常工作。

$inputfolder = 'C:/path/to/folder/'
$inputobject = Get-ChildItem $inputfolder
$outputpath = Join-Path $inputfolder 'done.csv'
Import-Csv $inputobject | select COLUMN1,COLUMN1 | Export-Csv -Path $outputpath -NoTypeInformation

2 个答案:

答案 0 :(得分:2)

Get-ChildItem返回一组(在这种情况下,因为您正在查看文件系统)文件对象,而不是文件名称。将文件对象数组传递给Import-CSV(或Get-Content)时,它会使用Name属性,包含路径。没有路径,它假定您希望查看当前目录。解决方法是不传递$inputobject,而是传递$inputobject.fullname,其中包括文件对象的路径。

熟悉基于文本的界面的人(例如CMD.EXE)或各种UNIX / Linux shell(例如bash)是常见的误解。那些较旧的炮弹通过管道传递文字; PowerShell传递实际对象,您需要知道传入数据的实际结构。

有来自Get-Help about_pipelines的PowerShell管道的良好信息。您还可以通过将其汇总到Get-Member来了解特定PowerShell对象的结构。

答案 1 :(得分:0)

这些命令:

-

返回目录'C:/ path / to / folder /'中的所有文件 您确定要处理所有文件吗?甚至可能不是.csv文件?

我建议使用:

0-1**2

这些只收集csv文件。

正如Jeff所写,你必须使用输入和输出对象的fullname属性,所以你的最后一个命令应如下所示:

$inputfolder = 'C:/path/to/folder/'
$inputobject = Get-ChildItem $inputfolder

请记住,您的$ onputobject不是单个文件,而是文件集合! Export-CSV无法“追加”到现有文件,因此您必须为其指定-Force,这样您将获得处理的最后一个文件的结果,或者您必须确保$ inputobject集合包含只需一个文件,否则第二次执行Export-CSV将停止并提示确认覆盖现有文件。