Building directory structure from csv with foreach

%3CLINGO-SUB%20id%3D%22lingo-sub-837571%22%20slang%3D%22en-US%22%3EBuilding%20directory%20structure%20from%20csv%20with%20foreach%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-837571%22%20slang%3D%22en-US%22%3E%3CP%3EHi%20Powershell%20community%2C%3C%2FP%3E%3CP%3EI%20am%20using%20the%20foreach%20function%20to%20build%20a%20directory%20structure%20that%20looks%20like%20this%20example%3CSPAN%3E%26nbsp%3B(folders%20and%20subfolders%2C%20for%20each%20state%2C%20for%20each%20team)%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3ETeams%0A%20%20%20%20Kansas%0A%20%20%20%20%20%20%20%20Wildcats%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20Documentation%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Stats%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Players%0A%20%20%20%20%20%20%20%20%20%20%20%20Projects%0A%20%20%20%20%20%20%20%20%20%20%20%20Forms%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%23%20Define%20buildPath%0Afunction%20buildPath(%24path)%0A%7B%0AIf(!(test-path%20%24path))%0A%20%7B%0A%20%20New-Item%20-Path%20%24path%20-ItemType%20Directory%20-Force%0A%20%7D%0A%7D%0A%0A%24csv%20%3D%20%22C%3A%5CExample%5CTeams.csv%22%0A%24root%20%3D%20%22C%3A%5CExample%5CTeams%22%0A%0A%0A%24States%20%3D%20(Import-Csv%20%24csv).States%0A%24Folders%20%3D%20(Import-Csv%20%24csv).Folders%0A%24Subfolders%20%3D%20(Import-Csv%20%24csv).Subfolders%0A%0AWrite-Host%20%24States%0A%0A%20%20%20%20foreach%20(%24state%20in%20%24States)%0A%20%20%20%20%7B%0A%0AWrite-Host%20%24state%0A%0A%20%20%20%20%20%20%20%20%24Schools%20%3D%20(Import-Csv%20%24csv).%24state%0A%0AWrite-Host%20%24Schools%0A%0A%20%20%20%20%20%20%20%20foreach%20(%24school%20in%20%24Schools)%0A%20%20%20%20%20%20%20%20%7B%0A%0AWrite-Host%20%24school%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(%24folder%20in%20%24Folders)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0AWrite-Host%20%24folder%0A%0A%23Create%20%24folder(s)%20in%20%24school%20directory%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24path%20%3D%20%22%24root%5C%24state%5C%24school%5C%24folder%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20buildPath(%24path)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%23Create%20%24subfolder(s)%20in%20%22Documentation%22%20directory%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(%24subfolder%20in%20%24Subfolders)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0AWrite-Host%20%24subfolder%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24path%20%3D%20%22%24root%5C%24state%5C%24school%5CDocumentation%5C%24subfolder%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20buildPath(%24path)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20problem%20is%20that%20the%20%22Folders%22%20and%20%22Subfolders%22%20are%20generating%20in%20the%20%22Teams%22%20directory%20and%20in%20the%20%22State%22%20directory%2C%20but%20not%20in%20the%20%22School%22%20directory%2C%20where%20they%20belong.%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EMy%20hypothesis%20is%20that%20the%20problem%20is%20in%20the%20path%20line%2C%20since%20it%20is%20generating%20the%20%22Folders%22%20at%20%24root%20and%20%24root%5C%24state%2C%20instead%20of%20in%20the%20%24root%5C%24state%5C%24school%20directories.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%24path%20%3D%20%22%24root%5C%24state%5C%24school%5C%24folder%22%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EIf%20foreach%20isn't%20the%20best%20way%20to%20approach%20this%20goal%2C%20I%20am%20also%20interested%20to%20hear%20other%20approaches.%20The%20csv%20is%20attached.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThank%20you%2C%3C%2FP%3E%3CP%3EAnnie%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-837571%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EWindows%20PowerShell%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-843253%22%20slang%3D%22en-US%22%3ERe%3A%20Building%20directory%20structure%20from%20csv%20with%20foreach%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-843253%22%20slang%3D%22en-US%22%3E%3CP%3EHi%20%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F403560%22%20target%3D%22_blank%22%3E%40annieeby%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ECan%20you%20please%20tell%20us%20the%20exact%20folder%20hierarchy%20you%20expect%20from%20your%20Teams.csv%20data%20sample.%20It%20will%20help%20us%20understand%20what%20you%20really%20need%20here.%20Maybe%20not%20only%20a%20script%20problem%2C%20but%20more%20a%20data%20one%20%3A)%3C%2Fimg%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ECheers%3C%2FP%3E%3CP%3ECyrille%3C%2FP%3E%3C%2FLINGO-BODY%3E
Regular Visitor

Hi Powershell community,

I am using the foreach function to build a directory structure that looks like this example (folders and subfolders, for each state, for each team)

 

 

Teams
    Kansas
        Wildcats  
            Documentation
                Stats
                Players
            Projects
            Forms

 

 

 

# Define buildPath
function buildPath($path)
{
If(!(test-path $path))
	{
		New-Item -Path $path -ItemType Directory -Force
	}
}

$csv = "C:\Example\Teams.csv"
$root = "C:\Example\Teams"


$States = (Import-Csv $csv).States
$Folders = (Import-Csv $csv).Folders
$Subfolders = (Import-Csv $csv).Subfolders

Write-Host $States

    foreach ($state in $States)
    {

Write-Host $state

        $Schools = (Import-Csv $csv).$state

Write-Host $Schools

        foreach ($school in $Schools)
        {

Write-Host $school

            foreach ($folder in $Folders)
            {

Write-Host $folder

#Create $folder(s) in $school directory
                $path = "$root\$state\$school\$folder"
                buildPath($path)
            }

#Create $subfolder(s) in "Documentation" directory            
            foreach ($subfolder in $Subfolders)
            {

Write-Host $subfolder
                $path = "$root\$state\$school\Documentation\$subfolder"
                buildPath($path)
            }
           
        }

    }

 

 

 

 

 

 

The problem is that the "Folders" and "Subfolders" are generating in the "Teams" directory and in the "State" directory, but not in the "School" directory, where they belong. 

 

My hypothesis is that the problem is in the path line, since it is generating the "Folders" at $root and $root\$state, instead of in the $root\$state\$school directories.

 

 

 

 

 

 

$path = "$root\$state\$school\$folder"

 

 

 

 

 

 

 

If foreach isn't the best way to approach this goal, I am also interested to hear other approaches. The csv is attached.

 

Thank you,

Annie

1 Reply
Highlighted

Hi @annieeby 

 

Can you please tell us the exact folder hierarchy you expect from your Teams.csv data sample. It will help us understand what you really need here. Maybe not only a script problem, but more a data one :)

 

Cheers

Cyrille