变量输出重复

variable outputs duplicates

这是我运行遇到的情况。

我有一个包含用户配置文件的共享文件夹。一些配置文件有一个像这样的文件夹 username.text1.v2 其他人有 username.text2.v2

我正在尝试编写一个能够区分两个文件夹之间差异的 powershell 脚本...这是我的代码

$ParentDir = Get-ChildItem "\blah\profiles" | Where-Object {$_.PSIsContainer -eq $True}

ForEach ($SubDir in $ParentDir)
{
    #$SubDirName = $SubDir.Name
    If ($SubDir.Name -like "*text1*")
    {
        $firstFolder = $SubDir.Name
    }
    If ($SubDir.Name -like "*text2*")
    {
        $secondFolder = $SubDir.Name
    }

    $secondFolder
}

当我输出代码时,我得到了所有的文件夹,但是同一个文件夹有几个重复的,三重的甚至四重的,而且是随机的。有些文件夹出现一次,有些文件夹出现多次。我不确定为什么它以这种方式输出,因为实际目录中没有任何重复项。

我似乎无法弄清楚为什么会这样?提前致谢!

看看你的循环中发生了什么。让我们假设以下文件夹结构:

  • 文本 1
  • 文本 2
  • 文本3

使用您的脚本将在您的循环中发生以下情况:

  1. 循环 运行,文件夹文本 1
    $firstfolder 获取字符串 "Text1"
    $secondfolder 未初始化 输出什么也没有,因为 $secondfolder 是 "empty"
  2. 循环 运行,文件夹文本 2
    $firstfolder 仍然包含来自第一个循环 运行
    的字符串 "Text1" $secondfolder 获取字符串 "Text2" 输出将是 Text2
  3. 循环 运行,文件夹文本 3
    $firstfolder 仍然包含来自第一个循环 运行
    的字符串 "Text1" $secondfolder 仍然包含来自第二个循环 运行
    的字符串 "Text2" 输出将是 Text2

要摆脱这种行为,您应该 initialize/clear 您的变量,一些方法可以做到这一点:

$firstfolder = ""
$secondfolder = $null
Clear-Variable -Name $thirdfolder