【发布时间】:2018-06-27 19:37:58
【问题描述】:
这应该是一个相当简单的问题来回答,但我一直无法在网上找到资源。我需要在不更改文件名或路径的情况下从 csv 中删除行。目前我正在尝试导入文件,过滤我需要的项目并将该数据导出到具有相同文件名的相同位置:
foreach ($csv in $csvLists){
Import-Csv $csv | Where-Object {[DateTime]$_.'Date' -ge $2WeeksOld} | Export-Csv $csv -NoType -Force
}
也试过了:
foreach ($csv in $csvLists){
Import-Csv $csv | Where-Object {[DateTime]$_.'Date' -ge $2WeeksOld} | Export-Csv $csv.PSParentPath -NoType -Force
}
我收到拒绝访问错误:
Export-Csv : Access to the path 'D:\Test' is denied.
At C:\script.ps1:20 char:71
+ ... .'Date' -ge $2WeeksOld} | Export-Csv $csv.PSParentPath -NoType -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (:) [Export-Csv], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand
我在这里缺少什么?是powershell正在读取文件并且无法同时导出的问题吗?我是否应该尝试将导入的数据设置为变量,然后将 csv 导出到 import-csv 管道之外?
一如既往地感谢您的帮助。
【问题讨论】:
-
您是否碰巧在应用中查看该文件?
-
没关系,错误看起来像您被拒绝访问该文件夹。你有那个文件夹的写权限吗?
-
为什么是
$csv.PSParentPath?使用$csv.Fullname是否可以解决问题? -
@gms0ulman 我的印象是 $csv 将包含文件名,而 PSParentPath 将提供路径,不知道为什么我不只是使用 Fullname 开头!这有效,请提供您的回复作为答案,我会确认。您是否有更多关于如何正确使用 PSParentPath 的信息?我想我可能用错了。
-
$csv.PSParentPath确实包含FileInfo对象的目录,但大多数人会使用$csv.DirectoryName或$csv.Directory.FullName。但是,如果$Csv是C:\Test\File.csv,那么Export-Csv -Path $Csv.PSParentPath将尝试在C:\中创建一个名为Test的文件。那是行不通的。 NTFS 不允许在同一文件夹中具有相同名称的对象。
标签: powershell csv