代码之家  ›  专栏  ›  技术社区  ›  Clayton Lewis

在数组中循环时替换不工作

  •  0
  • Clayton Lewis  · 技术社区  · 6 年前

    在一个项目上工作,我需要替换一个 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 回复  |  直到 6 年前
        1
  •  1
  •   arco444    6 年前

    $List_of_software = $List_Of_Software | 
      ForEach-Object {$_ -replace '\\\\Main_Blah_Path\\','C:\Folder\'}