Powershell 导入Csv和导出具有相同名称和路径的Csv

Powershell 导入Csv和导出具有相同名称和路径的Csv,powershell,csv,Powershell,Csv,这应该是一个相当简单的问题来回答,但我还没有找到一个在线资源。我需要在不更改文件名或路径的情况下从csv中删除行。当前我正在尝试导入文件,筛选所需的项目,并将数据导出到具有相同文件名的相同位置: foreach ($csv in $csvLists){ Import-Csv $csv | Where-Object {[DateTime]$_.'Date' -ge $2WeeksOld} | Export-Csv $csv -NoType -Force } 还尝试: foreach ($csv

这应该是一个相当简单的问题来回答,但我还没有找到一个在线资源。我需要在不更改文件名或路径的情况下从
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导出到
导入csv
管道之外


一如既往地感谢您的帮助。

使用
$csv.FullName
。包含文件/文件夹的完整路径。
以下是
System.IO.FileInfo
的一些常见属性:

Property        Contents
BaseName        MyFile
Directory*      <returns System.IO.DirectoryInfo object of "C:\Path\To">
Name            MyFile.txt
FullName        C:\Path\To\MyFile.txt
PSParentPath    Microsoft.PowerShell.Core\FileSystem::C:\Path\To
属性内容
基本名称MyFile
目录*
名称MyFile.txt
全名C:\Path\To\MyFile.txt
PSParentPath Microsoft.PowerShell.Core\FileSystem::C:\Path\To
我不知道
.PSParentPath
的用例。查看内容,我假设在需要指定父项的字符串值和字符串值时使用它。否则,您可以只使用
.Directory.Name

您可能会发现的类定义非常有用。它们是由
Get ChildItem
返回的对象。链接列表方法和属性;它们不列出代码/注释/脚本属性类型

提示:运行
$csv |获取成员
要查看此对象的成员,请查看
成员类型


*对于System.IO.DirectoryInfo对象,请使用父对象。在Win10中有一些不同的行为,并且我确信引入了一个别名,以便父对象适用于FileInfo或Directory适用于DirectoryInfo

使用
$csv.FullName
。包含文件/文件夹的完整路径。
以下是
System.IO.FileInfo
的一些常见属性:

Property        Contents
BaseName        MyFile
Directory*      <returns System.IO.DirectoryInfo object of "C:\Path\To">
Name            MyFile.txt
FullName        C:\Path\To\MyFile.txt
PSParentPath    Microsoft.PowerShell.Core\FileSystem::C:\Path\To
属性内容
基本名称MyFile
目录*
名称MyFile.txt
全名C:\Path\To\MyFile.txt
PSParentPath Microsoft.PowerShell.Core\FileSystem::C:\Path\To
我不知道
.PSParentPath
的用例。查看内容,我假设在需要指定父项的字符串值和字符串值时使用它。否则,您可以只使用
.Directory.Name

您可能会发现的类定义非常有用。它们是由
Get ChildItem
返回的对象。链接列表方法和属性;它们不列出代码/注释/脚本属性类型

提示:运行
$csv |获取成员
要查看此对象的成员,请查看
成员类型


*对于System.IO.DirectoryInfo对象,请使用父对象。在Win10中有一些不同的行为,并且我确信引入了一个别名,以便父对象适用于FileInfo或Directory适用于DirectoryInfo

这里的问题是,您试图在一行中完成所有操作,因此您打开了一个文件(锁定了它),并试图同时覆盖同一个文件(需要锁定它)。那不行

尝试:

或者,如果
$csvLists
FileInfo
对象的数组(例如来自
Get ChildItem
的输出):


这里的问题是,您试图在一行中完成所有操作,因此您正在打开一个文件(将其锁定),并试图同时覆盖同一个文件(需要将其锁定)。那不行

尝试:

或者,如果
$csvLists
FileInfo
对象的数组(例如来自
Get ChildItem
的输出):


您是否碰巧在应用程序中查看该文件?不管怎样,该错误看起来好像您被拒绝访问该文件夹。您有该文件夹的写入权限吗?为什么
$csv.PSParentPath
?使用
$csv.Fullname
是否解决了这个问题?@gms0ulman我觉得$csv将包含文件名,而PSParentPath将提供路径,我不确定为什么不首先使用Fullname!这是有效的,请提供您的回答,我将予以确认。你有关于如何正确使用PSParentPath的更多信息吗?我想我可能用错了。
$csv.PSParentPath
确实包含
FileInfo
对象的目录,但大多数人会使用
$csv.DirectoryName
$csv.directory.FullName
。但是,如果
$Csv
C:\Test\File.Csv
,则
导出Csv-Path$Csv.PSParentPath
将尝试在
C:\
中创建名为
Test
的文件。那是行不通的。NTFS不允许在同一文件夹中使用相同名称的对象。您是否碰巧在应用程序中查看该文件?不管怎样,该错误看起来好像您被拒绝访问该文件夹。您有该文件夹的写入权限吗?为什么
$csv.PSParentPath
?使用
$csv.Fullname
是否解决了这个问题?@gms0ulman我觉得$csv将包含文件名,而PSParentPath将提供路径,我不确定为什么不首先使用Fullname!这是有效的,请提供您的回答,我将予以确认。你有关于如何正确使用PSParentPath的更多信息吗?我想我可能用错了。
$csv.PSParentPath
确实包含
FileInfo
对象的目录,但大多数人会使用
$csv.DirectoryName
$csv.directory.FullName
。但是,如果
$Csv
C:\Test\File.Csv
,则
导出Csv-Path$Csv.PSParentPath
将尝试在
C:\
中创建名为
Test
的文件。那是行不通的。NTFS不允许在中使用相同名称的对象
foreach ($csv in $csvLists){
    $Data = Import-Csv $csv.FullName | Where-Object {[DateTime]$_.'Date' -ge $2WeeksOld}
    $Data | Export-Csv $csv.FullName -NoType -Force
}