Powershell 测试路径问题

Powershell 测试路径问题

我正在尝试使用测试路径来查找路径或路径/文件是否有效。

例如我可以这样做:

test-path -literalpath "c:\MyFolder\Study Setup.csv"

如果是,则返回 true;如果不是,则返回 false。

现在,这是我的问题,我对循环一无所知。理想情况下,我希望 Powershell 读取文件“Study Setup.csv”,其中包含一个名为 PATH 的列,并检查此列中每个记录的文件路径是否有效。

如果不是,则输出无效的路径。

除了一行程序之外,我在 Powershell 方面的经验非常有限,因此循环和许多东西一样陌生。

我知道这不是代码编写服务,但他非常感谢任何帮助。

答案1

我认为你甚至不需要任何循环,你只需要Where-Object

Import-CSV "C:\MyFolder\Study Setup.csv" | Where-Object { !(Test-Path $_.Path) }

Test-Path这将只返回返回的对象$false

对于导出,我会选择这个,因为我想要所有的 CSV 属性,而不仅仅是路径:

Import-CSV "C:\MyFolder\Study Setup.csv" | Where-Object { !(Test-Path $_.Path) } | Export-CSV "C:\MyFolder\False Paths in Study Setup.csv"

但如果你真的只想要路径,你可以这样做:

Import-CSV "C:\MyFolder\Study Setup.csv" | Where-Object { !(Test-Path $_.Path) } | Select-Object -ExpandProperty Path | Out-File "C:\MyFolder\False Paths in Study Setup.txt"

答案2

在 PowerShell 中有几种循环方法,请参阅有关该主题的帮助文件。 尝试这个...

Import-Csv -Path "$PWD\Study Setup.csv" | 
ForEach-Object {
    If (-Not (Test-Path -Path $PSItem.Path))
    {$PSItem.Path | Out-File -FilePath "$PWD\BadPaths.csv" -Append -WhatIf}
    Else {"The path $($PSItem.Path) already exists"}
}
# Results
<#
The path D:\Temp already exists
What if: Performing the operation "Output to File" on target "D:\Scripts\BadPaths.csv".
What if: Performing the operation "Output to File" on target "D:\Scripts\BadPaths.csv".
#>

如果一切看起来不错,则删除 -WhatIf 以完成运行。

仅供参考,当然,PowerShell 提供了许多方法来执行 X 或 Y。这是一种确定文件夹、文件等是否存在的不同方法。这完全取决于选择、代码风格等。

使用断言

答案3

未经测试,但感觉很自大 :D

$Source   = 'c:\MyFolder\Study Setup.csv'
$BadPaths = 'c:\MyFolder\BadPths.txt'

If ( test-path -literalpath $Source ) {
   ( Import-Csv $Source ).Path | ForEach{
      If ( -not ( test-path -literalpath $_ )) {
         '"{0}"' -f $_
      }
   }
} | Add-content $BadPaths

我喜欢 SImonS 关于 的提醒Wheere-Object。我会以这种方式合并它(并假设我们可以相信该$Source文件存在):

Filter Quote-String { '"{0}"' -f $_ }
$Source   = 'c:\MyFolder\Study Setup.csv'
$BadPaths = 'c:\MyFolder\BadPths.txt'

( Import-Csv $Source ).Path | Where{
    -not ( Test-Path -LiteralPath $_ )
} | Quote-String | Add-Content $BadPaths

相关内容