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
}