Заменить не работает, когда цикл через массив - PullRequest
0 голосов
/ 13 сентября 2018

Работаю над проектом, и мне нужно заменить 'path prefix' другим префиксом. Автоматизация копирования файлов, а затем я буду использовать эти файлы локально. Вместо того чтобы создавать новые переменные, я решил, что после завершения копирования я переназначу старые, которые мне не нужны. Возникла проблема с выполнением замены при цикле через массив. Я смог найти решение для этого конкретного сценария, но хотел бы понять, почему мои циклы не работают

Не отображаются ошибки, указывающие на то, почему он не работает.

Любая помощь в понимании того, почему замена не работает при зацикливании, будет полезна

Пример кода того, как я строю пути

[string]$Root_Path = "\\Main_Blah_Path\"

[string]$Software = $Root_Path + "Software\"

[string]$Adobe_Reader = $Software + "Adobe_Reader\"
[string]$Firefox = $Software + "Firefox\"
[string]$Google_Chrome = $Software + "Google_Chrome\"

[System.Collections.ArrayList]$List_Of_Software = @(
    $Adobe_Reader
    $Firefox
    $Google_Chrome
)

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

foreach ($Path in $List_Of_Software) {
    $Path -replace '\\\\Main_Blah_Path\\','C:\Folder\'
}
$List_Of_Software | ForEach-Object {$_ -replace '\\\\Main_Blah_Path\\','C:\Folder\'}

Пример сбоев у меня. Я не могу заменить и сохранить данные в себе, чтобы сделать замену. Я не мог заставить .replace работать вообще

foreach ($Path in $List_Of_Software) {
    $Path = $Path -replace '\\\\Main_Blah_Path\\','C:\Folder\'
}
$List_Of_Software | ForEach-Object {$_ = $_ -replace '\\\\Main_Blah_Path\\','C:\Folder\'}

foreach ($Path in $List_Of_Software) {
    $Path.Replace('\\\\Main_Blah_Path\\','C:\Folder\')
}

Решение, которое я использую для моего текущего сценария, но я могу предвидеть некоторые вещи в моем будущем, когда этот метод не будет приемлемым вариантом

$List_Of_Software = $List_Of_Software -replace '\\\\Main_Blah_Path\\','C:\Folder\'

1 Ответ

0 голосов
/ 13 сентября 2018

Вы почти у цели, вам просто нужно присвоить результаты замены обратно переменной, когда вы зацикливаете массив. Попробуйте:

$List_of_software = $List_Of_Software | 
  ForEach-Object {$_ -replace '\\\\Main_Blah_Path\\','C:\Folder\'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...