需要制作一个Powershell脚本来为文件中的每一行运行测试路径,如何操作?

时间:2019-05-03 09:16:16

标签: powershell

我想制作一个脚本。它将从记录路径的文件中读取内容。并对文件中的路径运行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并在代码中删除此部分。

2 个答案:

答案 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)

您的代码对我来说效果很好-我唯一看到的是您在foreach之间留有一个空格,但这可能只是一个错字

我使用了既有目录又有目录的文件来测试您的代码,它运行良好:

$tested_paths = foreach ($path in (Get-Content ".\paths.txt")) {
    [PSCustomObject]@{
        path_name   = $path
        path_exists = Test-Path $path
    }
}

$tested_paths | Format-Table