Old snapshots are deleted by the distribution cleanup agent. The distribution cleanup job will delete snapshots older than the @max_disretention value. It used to be, haven't tested so may still be true, the snapshot agent will only try once to remove previous files so if it hits an error or the files are locked or something like that they won't get deleted. Check the snapshot agent history to see if any errors are reported. Make sure the distribution cleanup job is running successfully. Make sure SQL Server agent has full rights on the snapshot folder.