Нужно сделать скрипт powershell для запуска test-path для каждой строки в файле, как? - PullRequest
0 голосов
/ 03 мая 2019

Я хочу сделать скрипт.Он будет читать содержимое файла, в котором записан путь.И запустите test-path для пути в файле, чтобы проверить, существуют ли эти файл / путь на локальном компьютере.

Вот мой текущий код powershell:

Foreach ($path in (get-content C:\temp\pathlist.txt)){
    [PSCustomObject]@{
        path = $path
        Exists = test-path $path
    }
}

Однако он всегда будет возвращаться«Ложь», даже если путь существует, и даже в TXT есть только одна строка.Я также попытался -TotalCount, чтобы ограничить строку, которую он читает.Но это снова не удалось.

Кроме того, на самом деле я хотел бы сделать некоторые строковые процессы на TXT.Текст в приведенном выше коде просто содержит нормальный путь.Но получаемый мной точный текст имеет формат: "C: \ Windows \", "1". Я использовал $ path = $ path.split (",") [0], чтобы получить "C: \ windows".».Но чтобы решить проблему, всегда ложную, я вместо этого использую простой текст и удаляю эту часть в своем коде.

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Ваш код работает нормально.Это должно быть что-то с вашим форматированием текста, я думаю?Не могли бы вы также поделиться текстовым файлом, который вы используете для тестирования?

Мой текстовый файл:

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
0 голосов
/ 03 мая 2019

Ваш код работал нормально для меня - единственное, что я вижу, это то, что у вас есть пробел между for и each, но это может быть только опечатка

Я использовал файл с существующими и несуществующими каталогами для тестирования вашего кода, и он работал нормально:

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

$tested_paths | Format-Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...