我想制作一个脚本。它将从记录路径的文件中读取内容。并对文件中的路径运行test-path,以验证这些文件/路径在本地计算机上是否存在。
这是我当前的powershell代码:
Foreach ($path in (get-content C:\temp\pathlist.txt)){
[PSCustomObject]@{
path = $path
Exists = test-path $path
}
}
但是,即使路径存在并且txt中只有一行,它也会始终返回“ False”。 我还尝试了-TotalCount来限制它读取的行。但是它又失败了。
此外,实际上我想对txt进行一些字符串处理。上面代码中的txt仅包含普通路径。但是我得到的原始txt的格式为: “ C:\ Windows \”,“ 1” 我曾经使用$ path = $ path.split(“,”)[0]来获取“ C:\ windows”。但是要解决始终为“ False”的问题,我改用简单的txt并在代码中删除此部分。
答案 0 :(得分:1)
您的代码似乎可以正常工作。我想这一定是您的文本格式吗? 您还可以共享用于测试的文本文件吗?
我的文本文件:
C:\Temp
C:\Windows
C:\NoExist
C:\Program Files
代码:
Foreach ($path in Get-Content .\test.txt) {
[PSCustomObject]@{
path = $path
Exists = Test-Path $path
}
}
我的输出:
path Exists
---- ------
C:\Temp True
C:\Windows True
C:\NoExist False
C:\Program Files True
评论后编辑:
您可以使用.split()
分割“上的路径”,如下例。
新文本文件:
"C:\temp\","1"
"C:\Windows\","3"
"C:\NoExist\","1"
"C:\Program Files\","2"
新代码:
Foreach ($path in Get-Content .\test.txt) {
$path = $path.Split('"')
[PSCustomObject]@{
path = $path[1]
Exists = Test-Path $path[1]
}
}
输出:
path Exists
---- ------
C:\temp\ False
C:\Windows\ True
C:\NoExist\ False
C:\Program Files\ True
答案 1 :(得分:0)
您的代码对我来说效果很好-我唯一看到的是您在for
和each
之间留有一个空格,但这可能只是一个错字
我使用了既有目录又有目录的文件来测试您的代码,它运行良好:
$tested_paths = foreach ($path in (Get-Content ".\paths.txt")) {
[PSCustomObject]@{
path_name = $path
path_exists = Test-Path $path
}
}
$tested_paths | Format-Table