变量输出重复

时间:2017-10-20 00:38:34

标签: powershell directory get-childitem

这是我正在进行的情况。

我有一个包含用户个人资料的共享文件夹。有些配置文件有一个像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 个答案:

答案 0 :(得分:0)

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

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

使用您的脚本将在您的循环中发生:

  1. 循环运行,文件夹文本1 $ firstfolder获取字符串" Text1"
    $ secondfolder未初始化 输出没什么,因为$ secondfolder是"空"
  2. 循环运行,文件夹Text2
    $ firstfolder仍然包含字符串" Text1"从第一次循环运行
    $ secondfolder获取字符串" Text2" 输出将为Text2
  3. 循环运行,文件夹Text3
    $ firstfolder仍然包含字符串" Text1"从第一次循环运行
    $ secondfolder仍然包含字符串" Text2"从第二次循环运行
    输出将为Text2
  4. 要摆脱这种行为,你应该初始化/清除你的变量,有些方法可以做到这一点:

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