2013-06-14 4 views
3

Я новичок в powershell и в настоящее время работает над редактированием одной строки текстового файла.Powershell - Замена значения на одну строку в текстовом файле

Когда я пытаюсь перезаписать текстовый файл, я получаю только одну строку в текстовом файле. Я пытаюсь вызвать функцию с

modifyconfig "test" "100" 

config.txt

check=0 
test=1 

Изменить Config Функция:

Function modifyConfig ([string]$key, [int]$value){ 
    $path = "D:\RenameScript\config.txt" 

    ((Get-Content $path) | 
    Foreach-Object { 
     write-host $_ 
     # If '=' is found, check key 
     if ($_.Contains("=")){ 
      # If key matches, replace old value with new value and break out of loop 
      $pos = $_.IndexOf("=") 
      $checkKey = $_.Substring(0, $pos) 
      if ($checkKey -eq $key){ 
       $oldValue = $_.Substring($pos+1) 
       write-host 'Key: ' $checkKey 
       write-host 'Old Value: ' $oldValue 
       $_.replace($oldValue,$value) 
       write-host "Result:" $_ 
      } 
     } else { 
      # Do nothing 
     } 
    }) | Set-Content ($path) 
} 

В результате я получаю в моем "config.txt":

test=100 

Мне не хватает "check = 0"

Что я пропустил?

ответ

3

$_.replace($oldValue,$value) в вашем внутреннем условном заменяет $oldValue на $value, а затем печатает измененную строку, но у вас нет кода, который не соответствует строкам. Из-за этого только измененная строка записывается обратно в $path.

Заменить линию

# Do nothing 

с

$_ 

, а также добавить else ветвь с $_ к внутренней условной.

Или вы могли бы назначить $_ на другую переменную и изменить код так:

Foreach-Object { 
    $line = $_ 
    if ($line -like "*=*") { 
     $arr = $line -split "=", 2 
     if ($arr[0].Trim() -eq $key) { 
      $arr[1] = $value 
      $line = $arr -join "=" 
     } 
    } 
    $line 
} 
+0

Спасибо! Это сработало отлично. –

1

или один вкладыш .. (точно не придавить заостренный ответ, но к названию вопроса)

(get-content $influxconf | foreach-object {$_ -replace "# auth-enabled = false" , "auth-enabled = true" }) | Set-Content $influxconf

Смежные вопросы