【问题标题】:variable outputs duplicates变量输出重复
【发布时间】:2017-10-20 00:38:34
【问题描述】:

这是我遇到的情况。

我有一个包含用户配置文件的共享文件夹。一些配置文件有一个这样的文件夹 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
}

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

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

【问题讨论】:

  • 从循环中删除打印 $secondFolder 并将其放在外面,这就是为什么您多次获得第二个文件夹
  • 谢谢,但这不起作用,因为它只会输出存储的最后一个变量,这就是它需要在循环中的原因。下面的答案解决了我的问题。不过感谢您的回复!

标签: powershell directory get-childitem


【解决方案1】:

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

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

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

  1. 循环运行,文件夹 Text1
    $firstfolder 获取字符串“Text1”
    $secondfolder 未初始化 输出什么都不是,因为 $secondfolder 是“空的”
  2. 循环运行,文件夹 Text2
    $firstfolder 仍然包含来自第一个循环运行的字符串“Text1”
    $secondfolder 获取字符串“Text2” 输出将是 Text2
  3. 循环运行,文件夹 Text3
    $firstfolder 仍然包含来自第一个循环运行的字符串“Text1”
    $secondfolder 仍然包含来自第二个循环运行的字符串“Text2”
    输出将是 Text2

要摆脱这种行为,您应该初始化/清除变量,一些方法可以做到这一点:

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

【讨论】:

  • 非常感谢!这正是我所需要的!
猜你喜欢
  • 2019-07-12
  • 2020-04-18
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2014-09-14
相关资源
最近更新 更多