简单的PowerShell脚本,从CSV获取PATHS,确认它们存在并写入另一个具有真实结果的CSV

时间:2018-06-04 19:46:46

标签: powershell csv

我是新手,我也是从PowerShell开始,尝试了几件事后我需要你的帮助。简单来说就是这样。

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

Path
C:\temp\1.txt
C:\temp\2.txt
C:\temp\3.txt
C:\temp\4.txt
C:\temp\5.txt
C:\temp\6.txt

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

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

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

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

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

Test-Path -Path C:\temp\1.txt

您能否帮我完成脚本以获取正确的数据,并将实际结果导出为CSV?

如何将结果“true”导出到.CSV并删除其位置中的文件?我有一个30000个文件的列表,我需要检查已被另一个进程删除,但我想保存那些仍然存在的文件列表,这些文件将被永久删除。非常感谢,真的。

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

问候语。

1 个答案:

答案 0 :(得分:1)

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

PS C:\src\t> type .\original.csv
Path
C:\temp\1.txt
C:\temp\2.txt
C:\temp\3.txt
C:\temp\4.txt
C:\temp\5.txt
C:\temp\6.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:\src\t> type .\original2.csv
"path","exists"
"C:\temp\1.txt","True"
"C:\temp\2.txt","True"
"C:\temp\3.txt","True"
"C:\temp\4.txt","False"
"C:\temp\5.txt","True"
"C:\temp\6.txt","True"

修改

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

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