title: Powershell - Export Multiple CSV's into unique folders
body: <p>I have been working on a PowerShell script for the better part of well a week or two. I've been able to get some parts of it working however I'm unable to fully get this automated.</p>
  
  <p>I deal with a lot of CSV files on a daily basis, I have been tasked with uploading them into our software however sometimes they're too large to handle so I break them down based upon their "type" (it's a column in the CSV) and I export it to a single CSV per "type". I've been able to accomplish this with the following:</p>
  
  <pre><code>$file = gci -Filter "*.csv";
  Import-Csv $file `
  | Group-Object –Property “type” `
  | Foreach-Object `
      { 
          $path=$_.name+”.csv” ; $_.group `
          | Export-Csv –Path $path –NoTypeInformation 
      }
  </code></pre>
  
  <p>So this works wonderfully, for each individual CSV. Unfortunately I don't have the time to do this for each individual CSV. Now I come to my other PowerShell script:</p>
  
  <pre><code>get-childitem -Filter "*.csv" `
  | select-object basename `
      | foreach-object{ $path=$_.basename+".csv" #iterate through files.
          if(!(Test-Path -path $_.basename)) #If the folder of the file can't be found then it will attempt to create it.
          {
              New-Item $_.basename -type directory; $file=$_.basename+".csv";
              Import-Csv $file `
              | Group-Object -Property "Type" `
              | Foreach-Object {
                  $path=$_.name+".csv"; $_.group `
                  |  ` 
                      if(!(Test-Path -path $path2))
                      {
                          New-Item $path2 -type directory
                          Export-Csv -Path $path2 + "\" + $path -NoTypeInformation
                      }
                      else
                      {
                          "Failed on: " + $_.basename
                          #Export-Csv -Path $_.basename + "\" + $path -NoTypeInformation
                      }                    
                  }
          }
          else
          {
          Import-Csv $path `
              | Group-Object -Property "Type" `
              | Foreach-Object {$path=$_.basename+".csv" ; $_.group                     
                  if(Test-Path -path $._)
                      {
                          New-Item $path2 -type directory
                          Export-Csv -Path $path2 + "\" + $path -NoTypeInformation
                      }
                      #else
                      #{
                          Write-Host "Failed on: $_.basename"
                          #Export-Csv -Path $_.basename + "\" + $path -NoTypeInformation
                      #}                    
                  }                
          }
  }
  </code></pre>
  
  <p>I just can't wrap my head around "why" this isn't working effectively. I have two conditionals. Is there a folder for the CSV? If no create one. I have to have another one because one of the "types" contains a \ which errors out if I don't have the folder, so I automatically try to create it. When I run the script I get the Path is null.</p>
  
  <p>The Error is:</p>
  
  <blockquote>
    <p>The term ' ' is not recognized as the name of a cmdlet, function,
    script file, or operable program. Check the spelling of the name, or
    if a path was included, verify that the path is correct and try again.
        At C:\Users\c.burkinshaw\foldermake.ps1:11 char:26
        +                     |  `  &lt;&lt;&lt;&lt; 
        + CategoryInfo          : ObjectNotFound: ( :String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException</p>
  
  <pre><code>Test-Path : Cannot bind argument to parameter 'Path' because it is null.
  At C:\Users\c.burkinshaw\foldermake.ps1:12 char:45
  +                         if(!(Test-Path -path &lt;&lt;&lt;&lt;  $path2))
      + CategoryInfo          : InvalidData: (:) [Test-Path], ParameterBindingValidationException
      + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
  </code></pre>
  </blockquote>
  
  <p>Any help would be greatly appreciated, if you have questions please don't hesitate to ask.</p>