Ever want to shorten folder names due to a long or exceeding
path?
PowerShell will take it easy to shorten folder names.
For example if you have a folder naming structure of project
folder name plus descriptions or generic folder name plus detailed name of the
folder.
Example: Images at the beach located in the other side of
the world, Photos taken while climbing Mount Everest, 07112015 reports about
findings on the walls of the cave under the cemetery, 20150911 metaphors and
narratives just about anything, Folder1 photos of the earth, Folder2 images on the
south
Obviously, such folder names will easily consume the
limitations of the folder path.
To shorten or rename such folders can be done manually if
there are only 3 folders but if there are
hundreds or thousands of such folders
can be a huge task and may take a while to do such work.
With the help of PowerShell it can be done automatically.
Here’s the script below, that shows how to mess up with string in PowerShell by shortening folder names.
##=========================================
$get_folder_names=dir d:\ss\
| where-object
{$_.PsIsContainer
-eq $true} | select-object name
| ft -HideTableHeaders |
Out-String
#$get_folder_names
foreach ($str_split_names
in $get_folder_names
-split '[\r\n]') {
$xtracted_folder_names=$str_split_names.subString(0, [System.Math]::Min(7, $str_split_names.Length))
#$xtracted_folder_names
$var1= "d:\ss\" + "$str_split_names"
$var2= $xtracted_folder_names
rename-item
$var1
$var2 -ErrorAction
SilentlyContinue
Clear-Host
}
##=========================================
What will the script do?
It will read the “ss” folder on drive d and get only 7
characters from its folder name and it will cut or delete the other characters.
Dir in PowerShell is an alias for Get-Childitem
{$_.PsIsContainer
-eq $true –
get only folders
select-object name
| ft -HideTableHeaders |
Out-String –-- select or get the folder names on the
path specified, hide the table headers and make the output as string
-split '[\r\n]' –
split the output array
Before you roll out the script on a production make sure to
test it on a test folders to make sure you got the desired output or you will
be able to check how the script works.
For example if the folders on path d:\ss have these folder names:
Folder1 photos of the earth
Folder2 images on the south
After running the script folders will be renamed to:
Folder1
Folder2
That will be the output after running the script.
Cheers… Hope it helps… Enjoy..
==================
Free Android Apps:
Click on links below to find out more:
https://play.google.com/store/apps/details?id=soulrefresh.beautiful.prayer
Catholic Rosary Guide for Android:
https://play.google.com/store/apps/details?id=com.myrosaryapp
http://quickbytesstuff.blogspot.sg/2014/09/how-to-recite-rosary.html
Divine Mercy Chaplet Guide (A Powerful prayer):
https://play.google.com/store/apps/details?id=com.dmercyapp
Educational Android App for Kids:
https://play.google.com/store/apps/details?id=com.xmultiplication
https://play.google.com/store/apps/details?id=com.letsmultiply
Hi
ReplyDeleteThanks for this script, but it only changes the first folder after G:\ss\, how can you make it change every foldername in G:\ss\, for example, G:\ss\Folder1\Folder3DELETETHIS\Folder4DELETETHIS, to
G:\ss\Folder1\Folder3\Folder4
thanks
Revise script below as per your need.
DeleteAssume folder structure:
c:\tempx\xfolder1\xfolder2\xfolder3\xfolder4\xfolder5
Output:
c:\tempx\xfolder1\folde2\folder3\folder4\folder5
Here's the script:
$folders= @()
$folders = Get-ChildItem -Recurse -Directory "C:\tempx\xfolder1"
$i=0
$allfolder=""
$dpreviousfolder=""
foreach ($folder in $folders) {
$newFolderName = $folder.Name.Substring(1,7)
$oldFolderName = $folder.Name.Substring(0,8)
write-host $folder
$oldfolder = "C:\tempx\xfolder1\" + $oldFolderName
$folderPath = "C:\tempx\xfolder1\" + $oldFolderName
if ( $i -eq "0") {
rename-item $oldfolder $newFolderName -Force -ErrorAction SilentlyContinue
}
$global:i++
if ( $i -gt "0") {
$dcurrentfolder = $oldFolderName
$1below = $dpreviousfolder+ $folder+ "\"
$dpreviousfolder+= $newfolderName + "\"
rename-item "C:\tempx\xfolder1\$1below" $newfolderName
}
}
$i=0
$dpreviousfolder=""