Powershell – Script – New folder for each file using same name
Creates a folder for each file in specified directory with the same name as the file.
Scenario: A folder contains many files belonging to different projects which the user wants to organise by grouping into separate folders.
[code lang="powershell"]
# Creates a folder for each file in specified directory with the same name as the file.
function CreateSameNameFolders($DirLocation)
{
# Create list of files in specified folder
$Files = Get-ChildItem -Path $DirLocation -File
# Exit function if no files exist in specified folder
if($Files.Length -eq 0)
{
Write-Output "No files found in specified folder. No folders created"
return
}
# Uncomment the line below to see the list of filenames in console
# Write-Output $Files
# Create a directory for each file in the specified folder
# To aid process checking, a count of folders created is used
$FoldCounter = 0
ForEach($CurFile in $Files)
{
$NewDirPath = -join($DirLocation,"\",$CurFile.BaseName)
if(Test-Path $NewDirPath)
{
# Keep count of times folder already existed
$FoldCounter++
}
else
{
new-item -Path $CurFile.Directory -Name $CurFile.BaseName -ItemType Directory
}
}
# Output the new folder count to aid checks
Write-Output "There was $FoldCounter folders that already existed and thus were not newly created"
# Put each file in '$Files' variable into directory with that name
ForEach($CurFile in $Files)
{
move-item -Path $CurFile.FullName -Destination (-join($CurFile.DirectoryName,"\",$CurFile.BaseName))
}
}
# Call the function using the path to the files to be inserted into new folders...
$CurLocation = "C:\_Path\To\Files"
CreateSameNameFolders($CurLocation)
[/code]