2017-10-20 153 views
0

这是我正在运行的情况。变量输出重复

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

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

我似乎无法弄清楚为什么发生这种情况?先谢谢你!

+0

取下环打印'$ secondFolder'并把它放在外面,这就是为什么你获得第二个文件夹多次 –

+0

谢谢,但这不会工作,因为它只会输出最后一个变量存储,这就是为什么它需要在循环中。下面的答案解决了我的问题。尽管谢谢你的回应! – Koobah84

回答

0

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

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

使用脚本按照你的循环会发生:

  1. 循环中运行,文件夹文本1
    $ firstfolder获取字符串“Text1”
    $ secondfolder不initializied 输出什么比$ secondfolder是“空”
  2. 循环中运行,文件夹文本2
    $ firstfolder仍含有从第一循环运行
    $ secondfolder得到字符串“文本2字符串“文本1” “ 输出将是文本2
  3. 循环中运行,文件夹文本3
    $ firstfolder仍然包含字符串‘’从第一循环运行
    $ secondfolder仍然包含字符串‘从第二循环运行
    输出文本2’将文本1是Text2

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

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

非常感谢!这正是我需要的! – Koobah84