Skip to main content

PowerShell Scripting: Removing Multiple Directories

Update 20150916
So the pic I used to display the CSV sample went missing. So the latest update just includes a text version of what was displayed. Thanks!

Original Post
I'm still fairly new to utilizing PowerShell to automate tasks and get big tasks done. But every time I use it, the tool makes my life a whole lot easier. Recently I was tasked with deleting over 500 directories. Thankfully someone else had the task of identifying the directories that were slated to be deleted, I just had to complete the process of removing them. Thanks to a little article from the Scripting Guy! Blog (found HERE) I had some direction to start in.

What I ended up doing is creating a single column CSV file that contains the path to the directories to be deleted. This path includes drive letter, and the overall path to the folder. It should look similar to this:
delete
C:\Path\to\folder
C:\Path\to\folder2
D:\Path\to\folder
D:\Path\to\folder2

I named the file "delete.csv" and placed it into my scripting folder on the C drive. Now with this set up and in place we can move onto using PowerShell. We will be using a combination of commands in a one-liner that will not only delete the files but auto-confirm the deletion. I'll put the command next and attempt to break it down as far as my knowledge of PowerShell goes...

Import-CSV .\delete.csv | Foreach-Object { Remove-Item -LiteralPath $_.delete -Force -Recurse -WhatIf }

The first part "Import-CSV" obviously tells PowerShell to look at the CSV we created with the necessary directories to be deleted. The "Foreach-Object" will loop through the CSV to delete all items in it. The "Remove-Item" part tells PowerShell to deleted the specified items with a "LiteralPath" (where the directory can be found) found in the "delete" column. The "Force" item tells PowerShell to remove items that cannot be changed, such as read only or hidden files. The "Recurse" item will force the confirmation of the deletion (so you don't have to babysit the command and keep hitting "Y"). Finally the "WhatIf" item allows you to test the command and see if it works before running it. This also gives you an opportunity to make sure you have the correct directories that you want to delete. Be sure to remove the "-WhatIf" when you are ready for the command to delete the selected directories!!

For more information check out the Microsoft Tech Net article on the Remove-Item cmdlet HERE.

Comments

  1. Larry,

    Thanks much. This worked great. You may want to make available a CSV sample to help in setting that file up. Even without that file (though), I was able to clean up some folders that had a specific criteria.

    Great Work,
    Greg R

    ReplyDelete
    Replies
    1. Hi Greg,

      Thanks for pointing that out! I had a screen shot there of the sample CSV that seems to have been lost... I've updated the post with some sample text of what the CSV should contain. Glad it worked for you.

      Delete

Post a Comment

Popular posts from this blog

Visio Stencils Pack for Azure and Microsoft Integration (v5.0.0)

First off, I'd like to send a big shout out to Sandro Pereira who's been managing the vision stencils pack. Essentially, I'm re-posting his information here, because I had a really hard time finding the latest Visio pack for Azure, that wasn't a bunch of SVG's. My thought is that if more people re-post, maybe the search engines of the internet will have an easier time propagating the information... Sandero's Blog (the original post around the new stencils): https://blog.sandro-pereira.com/2019/10/18/microsoft-integration-and-azure-stencils-pack-for-visio-new-major-version-available-v5-0-0/ Sandero's GitHub: https://github.com/sandroasp/Microsoft-Integration-and-Azure-Stencils-Pack-for-Visio Microsoft TechNet Download: https://gallery.technet.microsoft.com/Collection-of-Integration-e6a3f4d0 I will say, and maybe it's just because I'm using Visio 2013, each icon has a boarder that needs to be removed when putting it on the page... Likely it...

Keto Kickin' Choffle

Alight, first recipe on the blog... If you've had a chance to reach the "About" section, you will have seen that, rather than spinning up multiple blogs, I'm just going to combine my passions for tech, food, health, and music into this one space. If you're not a fan, then too bad. I really just don't want to manage more than one blog.... With that, here goes nothing... So I recently came across the choffle. This is a really great, and fast to make replacement for buns. I'm also a huge fan of spicy foods. Well, I got the great idea to combine the heat with the choffle. And let me tell you, it turned out really good. I like to use this for a bun replacement when I'm in the mood for that extra kick, but not the extra toppings. Why? Because the extra toppings are now combined in the choffle. Thus removing the need for the additional toppings on my burgers. Enjoy. Kickin' choffle The choffle mix with a kick! Author: Larry L. Preparation Time: 3...

Replacing rsyslog with syslog-ng on RHEL 6.5

So...I had a piece of monitoring software that didn't play nice with the RHEL default rsyslog for log collection. The software was developed to only work with syslog-ng. I'll be going over the steps that I took, that worked for me, in replacing rsyslog with syslog-ng. I would imagine that these same steps should work for any Linux system similar to RHEL (Fedora, CentOS, etc.). For others (like Debein based distributions), I would need to look into that (coming in a future update to this post). First, remove rsyslog. You will need to keep the dependencies as they will be needed for syslog-ng: sudo rpm -e --nodeps rsyslog Next we will need to add the EPEL repository (more info can be found HERE ): wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm sudo rpm -ivh epel-release-6-8.rpm sudo yum repolist That last command will list all the installed repositories. You are simply verifying that the EPEL package has been installed. Now that we fi...