Как читать текстовый файл, содержащий пути к другим текстовым файлам, которые требуют чтения powershell - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь создать сценарий PowerShell, который будет:

  1. Чтение текстового файла (Paths.txt), который содержит пути (path1, path2, ..).

  2. Для каждого пути я хочу прочитать его содержимое и найти определенный текст (например, «ПОД СТРОКОЙ»).

    • Если он найдендобавьте содержимое другого файла (Add.txt) в этой области.

    • Если нет, добавьте этот конкретный текст ("ПОД СТРОКОЙ") в файл и содержимое файла (Add.txt)


Редактировать с Redd:

Как и обещали, мы просыпаемся вместе.

текущий код из комментариев:

$p = C:\user\paths.txt 
$paths = get-content $p

Переписать:

$paths = Get-Content "C:\user\paths.txt"

Теперь цель состоит в том, чтобы выполнить цикл для каждой строки.Здесь вы бы использовали цикл ForEach.

ForEach($path in $paths){
    Write-Host $path
}

1 Ответ

0 голосов
/ 13 июля 2019

Итак, у вас есть это пока ..

$paths = Get-Content "C:\user\paths.txt"
ForEach($path in $paths){
    Write-Host $path
}

Далее вам потребуется Get-Content $path в первом цикле ForEach, а затем перебрать содержимое этого файла, используя другой цикл ForEach внутри первого цикла. Затем добавьте операторы If, чтобы проверить, имеет ли строка "UNDER LINE" в этой строке.

Есть и другие способы сделать это, но это простой способ, который легко прочитать. Извините, я не смог вас пройти через это, потому что я не могу комментировать, так как у меня еще недостаточно представителей. Но я прокомментировал приведенный ниже код, и, надеюсь, вы увидите, что я делаю. Если это не то, что вы пытались сделать, или если у вас есть какие-либо вопросы, просто дайте мне знать!

$paths = Get-Content "C:\Users\paths.txt"
# Loop through paths.txt for each path

ForEach($path in $paths){
    # Store the content of $path
    $OriginalFile = Get-Content $path

    # List for creating the new updated/modified file
    [String[]]$ModifiedFile = @()

    # Loop through each line of the Original file
    ForEach($line in $OriginalFile){

        # Check the line if "UNDER LINE" is on that line
        if($line -like "*UNDER LINE*"){

            # Add the current line from the Original file to the new file
            $ModifiedFile += $line

            # Add the content of Add.txt (Update the path for the Add.txt)
            $ModifiedFile += Get-Content ".\Add.txt"
        }
        # If the line from the Original file doesn't contain "UNDER LINE"
        else {

            # Add "UNDER LINE" to the new file
            $ModifiedFile += "UNDER LINE"

            # Add the content of Add.txt (Update the path for the Add.txt)
            $ModifiedFile += Get-Content ".\Add.txt"
        }
    }

    # This will overwrite $path file with the modified version.
    # For testing purposes change $path to a new file name to verify output txt file is correct.
    Set-Content $path $ModifiedFile
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...