如何读取文本文件,该文本文件包含需要阅读powershell的其他文本文件的路径

时间:2019-07-03 12:35:28

标签: powershell file text

我正在尝试创建一个PowerShell脚本,该脚本将:

  1. 读取包含路径(path1,path2,..)的文本文件(Paths.txt)。

  2. 对于每个路径,我想阅读它的内容并查找特定的文本(例如“下划线”)。

    • 如果找到,则在此区域下添加另一个文件(Add.txt)的内容。

    • 如果没有,请将此特定文本(“下划线”)添加到文件中,并添加文件内容(Add.txt)


从Redd编辑:

正如我们所承诺的那样,我们希望将它们结合在一起。

注释中的当前代码:

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

重写:

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

现在的目标是为每一行循环。在这里,您将使用一个ForEach-Loop。

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

1 个答案:

答案 0 :(得分:0)

所以到目前为止,您已经掌握了。

$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
}