简单的PowerShell脚本,从CSV获取路径,确认这些路径存在,并编写另一个具有真实结果的CSV



我是新手,我也从PowerShell开始,在尝试了几件事之后,我需要你的帮助。在一件简单的事情上。

我正在尝试导入带有文件/路径列表的.csv,然后确认这些路由存在于硬盘驱动器上。然后,当我得到结果时,我需要将找到的路径的结果导出回.csv 我在 c:\temp\original 中有这个 CSV.csv 包含以下数据:

Path
C:temp1.txt
C:temp2.txt
C:temp3.txt
C:temp4.txt
C:temp5.txt
C:temp6.txt

我有这些文件 1.txt、3.txt 和 5.txt。我创建了这段代码,但所有结果都返回"False"。

$data=import-csv "c:temporiginal.csv"
foreach ($path in $data) {
test-Path -path $path | Write-Host }

当我使用以下代码时,会出现文件路径,所以我认为它很好地保留了 csv 数据:

$data=import-csv "c:temporiginal.csv"
foreach ($path in $data) {
Write-Host test-Path -path $path }

我这样做,如果它显示文件为真:

Test-Path -Path C:temp1.txt

你能帮我完成脚本以获得正确的数据并将实际结果导出到 CSV 吗?

我应该如何使结果"真实"将它们导出到 .CSV 并删除其位置中的文件?我有一个包含 30000 个文件的列表,我需要检查这些文件已被另一个进程删除,但我想保存仍然存在的文件列表,这些文件将被永久删除。非常感谢你,真的。

我真的很感激。提前谢谢。

问候。

这是我开始使用的源数据。感谢您编辑问题。

PS C:srct> type .original.csv
Path
C:temp1.txt
C:temp2.txt
C:temp3.txt
C:temp4.txt
C:temp5.txt
C:temp6.txt

该代码导入.csv文件,然后创建一个对象,其中包含path字段和指示该文件是否存在的表达式。

Import-Csv -Path '.original.csv' |
Select-Object -Property path, @{Name="exists";Expression={Test-Path -Path $_.path}} |
Export-Csv -Path '.original2.csv' -NoTypeInformation

这导致了以下输出。

PS C:srct> type .original2.csv
"path","exists"
"C:temp1.txt","True"
"C:temp2.txt","True"
"C:temp3.txt","True"
"C:temp4.txt","False"
"C:temp5.txt","True"
"C:temp6.txt","True"

编辑:

此代码将删除存在的文件,并将名称放入输出.csv日志文件中。如果确信将删除正确的文件,请从Remove-Itemcmdlet 中删除-WhatIf

Import-Csv -Path '.original.csv' |
Where-Object { Test-Path $_.Path } |
ForEach-Object {
Remove-Item -Path $_.Path -WhatIf
$_
} |
Export-Csv -Path '.original2.csv' -NoTypeInformation

最新更新