PowerShell改变你不知道的东西

时间:2017-11-09 11:33:52

标签: powershell variables

我需要使用PowerShell脚本更改Property文件。

属性文件中的行如下所示:

  

max.tree.children.threshold =“这是一个我不知道的数字”

所以我的脚本读取文件并找到这一行,但我不能说他应该覆盖这个号码,因为我不知道这个号码?

我可以设置一个你不知道其中有什么的变量吗?

ForEach($Datei in Get-ChildItem $test1) {
    # Get-Content liest eine Texdatei Zeile für Zeile ein
    # in der Variablen $Zeilen steht deshalb eine Liste von Zeilen (Array)
    $Zeilen =  Get-Content -Path $Datei.Fullname
    # Die Datei befindet sich nun Komplett im Speicher (in der Variablen $Zeilen)
    # deshalb können wir die Datei überschreiben

    # Zeilen Zähler, wird nur gebraucht um die erste Zeile zu erkennen
    $ZeilenZähler = 1

    # jede Zeile abarbeiten
    foreach($Zeile in $Zeilen)
    {
        # Hier findet meine Dateiveränderung statt.
        # Beispiel: Alle Buchstaben 'a' durch den Buchstaben 'o' ersetzen
        $Zeile = $Zeile -replace "max.tree.children.threshold="Dont know whats here!"","max.tree.children.threshold=300"

        #Veränderte Zeile anzeigen lassen
        Write-Host "Geänderte Zeile in Datei $($Datei.Fullname)"
        Write-Host $Zeile

        # Nur bei der ersten Zeile wird die Alte Datei ("leer") neu angelegt (überschrieben)!
        If($ZeilenZähler -eq 1 ) {
           Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force
        }
        Else {
            # jede weitere Zeile an die neue erstellte Datei anhängen (Parameter Append)
            Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force -Append
        }

        # Zeilenzähler hochsetzen
        $ZeilenZähler++
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式轻松完成此操作:

...
$file =  $Datei.Fullname
(Get-Content $file) -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" | Set-Content $file
...

我们首先阅读该文件的内容,并将max.tree.children.threshold=\d+的所有内容(\d+将与该行的其余部分匹配,只要它的数字)替换为max.tree.children.threshold=300。< / p>

答案 1 :(得分:0)

要专门检查数字,您可以使用\d+检查一个数字,这意味着正则表达式中有一个或多个数字

$Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300"