My C: drive became full, and it came to my mind that it’s hard to move files to a new SSD1 if I buy one later. Every Windows user knows the feeling: the system drive fills up silently, and the big offenders are always the same few folders. So, it got me thinking: what are the things I can do to remove and free up space in my C: drive without a fresh install?
The answer I settled on was relocating the ProgramData folder to a spare drive and pointing the original location back with junctions. It is a powerful trick, and it comes with a warning, so read carefully.

I don’t know where I’m going from here, but I promise it won’t be boring.
~ David Bowie.
The first thing that comes up is using the tool Disk Cleanup bundled with Windows 10. It only freed up 10Gb of data, which helped, but was nowhere near enough. Then I checked all the folder sizes to find which contained the largest amount of data.
The result was my user account and the ProgramData folder.
Here are the things I did in order to move ProgramData contents to my other spare drive.
DISCLAIMER: Before doing this on your machine please test and research first each command before executing on your machine / production environment. ProgramData is full of system state, and a broken move can mean broken applications.
🚚 Copy the Folder Structure
First, I copied and mirrored the ProgramData folder structure and ACL’s2 using the command robocopy. The /MIR flag tells robocopy to retain security settings and state of files:
robocopy /XJ /MIR "C:\ProgramData" "D:\ProgramData"
The /XJ flag is important: it excludes junction points, so you do not end up chasing symbolic links into an infinite copy loop.
You could also use this other command flags; this command is non-destructive, unlike the mirror flag. The mirror flag deletes files at the destination while this just overwrites and retains files that are missing in the source:
robocopy /xj /s /copyall C:\ProgramData D:\ProgramData
The /copyall flag copies security settings, timestamps, and everything else, so the files arrive with their permissions intact.
🔗 Create the Junctions
After everything’s done copying, you start creating junction links and symlinks3 from your spare drive (for me it’s the D: drive). The %~NA tells the batch command it will only get the base folder name, and the %~A gets the whole absolute path. The command below will only create directory junctions to begin with:
FOR /D %A IN ("D:\ProgramData\*") DO (MKLINK /J "C:\ProgramData\%~NA" "%~A")
This next command specifically creates symbolic links to files from source to destination:
FOR %A IN ("D:\ProgramData\*") DO (MKLINK "C:\ProgramData\%~NXA" "%~A")
After the junctions are in place, C:\ProgramData still works exactly as before: applications open the same path, and Windows silently follows the junction to D:. The space, meanwhile, has moved off the system drive.
✅ Verify and Clean Up
Then after that restart your machine and ensure everything’s working fine. Open a few apps that store data in ProgramData and confirm they still read and write normally. I think some folders like Microsoft and Packages should be excluded in copying and making junctions, since Windows treats those specially and can break if moved.
That’s all guys. If you have any questions, DM me or comment in this post.
🧠 Final Thoughts
Moving ProgramData is the nuclear option for a full system drive, and it is not the first thing you should try. Run Disk Cleanup first, check the big folders, and only then consider relocation, because once applications are pointed at junctions, undoing it means repeating the whole process in reverse.
When it works, though, it is deeply satisfying: your system drive gets fresh air, and everything keeps running as if nothing moved. Just keep a backup and a plan before you start. If you have any questions, DM me or comment in this post.
- A solid-state drive (SSD) is a solid-state storage device that uses integrated circuit assemblies to store data persistently, typically using flash memory, and functioning as secondary storage in the hierarchy of computer storage. It is also sometimes called a solid-state device or a solid-state disk, even though SSDs lack the physical spinning disks and movable read-write heads used in hard disk drives (HDDs) and floppy disks. ↩︎
- An access-control list (ACL) is a list of permissions associated with a system resource (object). An ACL specifies which users or system processes are granted access to objects, as well as what operations are allowed on given objects. ↩︎
- A symbolic link (also symlink or soft link) is a term for any file that contains a reference to another file or directory in the form of an absolute or relative path and that affects pathname resolution. ↩︎
