Recently, I asked iTunes to organize my music directory (getting music from different sources other than just the iTunes store left it a little messy and I decided I’d let iTunes do its thing) and it did a great job; however, it left a bunch of empty directories. Although these empty directories didn’t pose any performance impact, they just looked… messy and I decided I’d delete them. I started doing this one by one and soon realized I had over 50 empty directories and sub directories. Being lazy, I decided to run a command to remove these directories. I’ve done this a lot in Linux so I figured it was easy; well, not quite, but it’s also not that hard. In this guide, I’ll show you what I did and hope you can find this useful in some way.
Remove Empty Directories Using the Command Line
Note: “Directory” and “folder” interchangeable terms in this context.
What I decided to do was list out all directories and parse them out to a batch file. To do this:
1. Open the command prompt (press Winkey+R, type cmd, and press Enter.)
2. Change the directory to the base directory containing the empty folders and sub-folders. In my case I switched to the Y: drive with the command:
y:
and then changed to my iTunes music directory with the command
cd Y:\Music\iTunes\iTunes Media\Music
3. Run the following command:
dir /ad/b/s | sort /r >>out.bat
This command does the following:
dir – Runs the directory command
/ad – Selects files with the “directory” attribute i.e. all folders
/b – Base listing i.e. just folder names
/s – Include sub-folders
| – Pipe output from the dir /ad/b/s command to the following command (sort.)
sort – Sort the output
/r – In reverse order. So, when we get to the next step we’ll be able to delete empty subfolders before we delete the parent folders (otherwise the parent folders wouldn’t be seen as empty.) When making this guide, I missed this parameter and couldn’t work out why it was only deleting some folders — before realizing there was a pattern to the results.
>>out.bat – Created an output of the command in out.bat in the same directory you’re working in (in this case, the iTunes music folder.)
4. Now open out.bat in a good text editor that can handle regular expressions (RegEx) i.e. Notepad++. We’re going to modify this output to turn it into a series of commands that with remove the directories (RD) one by one without deleting directories with files in them (default for the RD command.)
5. Press CTRL+R to open the Replace tool. Replace the first part of the directory path (i.e. Y:\Music\iTunes) with RD “[Directory path] RD in front of it. This basically adds RD (remove directory) to the front of every line:
i.e.
Find: Y:\Music\iTunes\iTunes
Replace: RD “Y:\Music\iTunes\iTunes
Note: Do this in either Normal or Extended search mode.
6. Now to add a double quote to the end of each line. You can either do this manually (which I am too lazy to do) or by using a regular expression (you could also do it in word using paragraph marks as your search criteria.)
You’ll want to find each line and replace it with the line and a double quote i.e.
Find: ^(.*)$
Replace: \1″
Click Replace All to update the whole file.
7. Now add the word PAUSE to the end of the batch file to show the output in case there are any errors:
8. The next two steps are optional but I advise you do them to ensure your directories are empty.
As Windows creates thumbnail files by default, directories with media files in them will likely have a thumbs.db file in each of them. First, you’ll need to show hidden files and then search the base directory for thumbs.db and delete them all (even in the folders that still contains files that you don’t want to delete.)
9. As iTunes also adds a bunch of .jpg files to each directory (that it didn’t clear up when rearranging them), you’ll need to delete these too. Search for *.jpg and delete them all (this will delete the files from directories you want to keep but iTunes will replace them if needed.)
10. Now the fun part: double click your saved batch file to run it. Click Run when prompted.
11. As we added the PAUSE at the end of the file, the command prompt will show us the output. Notice a lot of directories were not deleted as they are not empty. That’s a good thing.
12. Now go to the directory and check that the empty folders are deleted.
This may take some time the first time you do it, but I am sure it will save you a ton of time in the future.
About Rich
Rich is the owner and creator of Windows Guides; he spends his time breaking things on his PC so he can write how-to guides to fix them.
- Web
- |
- |
- |
- |
- Google+
- |
- More Posts (1019)
Good tip Rich :-)
Thanks a lot for your post.. It helped me a lot…..For this program I am googling from past one week
Thanks So much
Shaik
This is a lot of work and it yields a result that can only be used once in one directory. A cmd script containing a couple of FOR loops could be used for a universal tool to remove empty directories. I’ve whipped up one and it is pasted below. I can explain it but I don’t want to waste the time with documentation unless someone cares…
@echo off
cls
echo.
echo **************************** DeleteEmpty.cmd *******************************
echo * *
echo * This utility deletes empty directories below the current directory. *
echo * *
echo * Just navigate to the “highest” directory below which you want to remove *
echo * any empty directories and execute this utility. *
echo * *
echo * You will be asked to verify the directory and if you would like to *
echo * perform a test of the possible results. If you choose the test option, *
echo * the directories that would be deleted are just listed. *
echo * *
echo ****************************************************************************
echo. & echo.
echo Current Directory: %CD%
echo.
choice /c ytn /N /M “Is this the correct directory to start from? [(Y)es, (N)o or (T)est]: ”
set ANSWER=%errorlevel% & if %ANSWER% equ 003 goto :EOF
set LABEL=DELETE & if %ANSWER% equ 002 set LABEL=TEST
echo. & echo.
::Enumerate directories below current and pass directory name to testing loop then call “action”
for /D %%d in (*) do for /F “usebackq delims=,” %%a in (`”if not exist “%%d*.jpg” echo “%%d””`) do call :%LABEL% %%d
goto :END
:DELETE
echo Directory deleted: %* && rd /s /q %*
exit /b
:TEST
echo Directory that would have been deleted: %*
exit /b
:END
echo.
echo Operation Completed
echo.
echo.
echo.
find . -empty
Oh, wait…Windows. Nevermind. :)
find . -empty
Oh, wait…Windows. Nevermind. :)
I just concatenate in Excel, it’s just as easy. Good post tho.
the will delete all empty folders in current folder and all subfolders using windows 7 (tested on 32bit)open notepadcopy and paste this line below for /f “delims=” %%d in (‘dir /s /b /ad ^| sort /r’) do rd “%%d”save file rmdir.bat (change filetype in notepad to all files)move this file to the root folder you wish to delete empty folders and double clickthats all there is to it simple
This works perfectly and it’s so much simpler!
Didn’t even work, eeeuuuurrrggghhhh.
OH Wow, thank you so much! This cut down on all the empty directories hanging about on my Droid Razr. One thing I can’t stand that Droid doesn’t, and that’s have an easy way of cleaning up all the empty directories it leaves behind. So much tidier yay!