- RemoveDirectoryA function (fileapi.h)
- Syntax
- Parameters
- Return value
- Remarks
- Удаление старых профилей пользователей Windows с помощью GPO или PowerShell
- Ручное удаление профиля пользователя в Windows
- Групповая политика автоматического удаления старых профилей
- Очистка сервера от старых профилей пользователей с помощью PowerShell
- Rmdir : Delete directory from command line
- Delete folder from CMD
- How to delete a non empty folder
- Force delete a folder without confirmation
- Deleting directory with white spaces in the name
- Delete contents of a directory but keep the directory
- Errors
RemoveDirectoryA function (fileapi.h)
Deletes an existing empty directory.
To perform this operation as a transacted operation, use the RemoveDirectoryTransacted function.
Syntax
Parameters
The path of the directory to be removed. This path must specify an empty directory, and the calling process must have delete access to the directory.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend «\\?\» to the path. For more information, see Naming a File.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed.
To recursively delete the files in a directory, use the SHFileOperation function.
RemoveDirectory removes a directory junction, even if the contents of the target are not empty; the function removes directory junctions regardless of the state of the target object. For more information on junctions, see Hard Links and Junctions.
In WindowsВ 8 and Windows ServerВ 2012, this function is supported by the following technologies.
Technology | Supported |
---|---|
Server Message Block (SMB) 3.0 protocol | Yes |
SMB 3.0 Transparent Failover (TFO) | Yes |
SMB 3.0 with Scale-out File Shares (SO) | Yes |
Cluster Shared Volume File System (CsvFS) | Yes |
Resilient File System (ReFS) | Yes |
В
The fileapi.h header defines RemoveDirectory as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.
Удаление старых профилей пользователей Windows с помощью GPO или PowerShell
На рабочих станциях и серверах Windows, особенно на терминальных серверах RDS (Remote Desktop Services), периодически возникает необходимость очистки каталога C:\Users от старых профилей пользователей (уволенные пользователи, пользователи, которые долго не используют сервер и т.д.).
Основная проблема терминальных серверов – постоянный рост размеров каталогов профилей пользователей на диске. Частично эта проблема решается политиками квотирования размера профиля пользователя с помощью FSRM или NTFS квот, перемещаемыми папками и т.д. Но при большом количестве пользователей терминального сервера в папке C:\Users со временем накапливается огромное количество каталогов с ненужными профилями пользователей.
Ручное удаление профиля пользователя в Windows
Многие начинающиеся администраторы пытаются вручную удалить каталог с профилем пользователя из папки C:\Users. Так можно делать, если вы после удаления папки вручную удалите раздел профиля пользователя со ссылкой на каталог в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList. Правильный ручной способ удаления профиля пользователя в Windows – открыть свойства системы, перейти в Advanced System Settings -> User Profiles -> Settings, выбрать в списке пользователя (в столбце Size указан размер профиля пользователя) и нажать кнопку Удалить.
Но это ручной способ, а хочется автоматизации.
Групповая политика автоматического удаления старых профилей
В Windows есть встроенная групповая политика для автоматического удаления старых профилей пользователей старше xx дней. Эта политика находится в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Профили пользователей (Computer Configuration -> Administrative Templates -> System -> User Profiles) и называется “Удалять при перезагрузке системы профили пользователей по истечении указанного числа дней” (Delete user profiles older than a specified number days on system restart). Вы можете включить этот параметр в локальном редакторе политик (gpedit.msc) или с помощью доменных политик из консоли GPMC.msc.
Включите политику и укажите через сколько дней профиль пользователя считается неактивным и “Служба профилей пользователей Windows” можно автоматически удалить такой профиль при следующей перезагрузке. Обычно тут стоит указать не менее 45-90 дней.
Основные проблемы такого способа автоматической очистки профилей – ожидание перезагрузки сервера и неизбирательность (вы не можете запретить удаление определенных профилей, например, локальных учетных записей, администраторов и т.д.). Также эта политика может не работать, если некоторое стороннее ПО (чаще всего это антивирус) обращается к файлу NTUSER.DAT в профилях пользователей и обновляет дату последнего использования.
Очистка сервера от старых профилей пользователей с помощью PowerShell
Вместо использования рассмотренной выше политики автоматической очистки профилей, вы можете использовать простой PowerShell скрипт для поиска и удаления профилей неактивных или заблокированных пользователей.
Сначала попробуем подсчитать размер профиля каждого пользователя в папке C:\Users c помощью простого скрипта из статьи “Вывести размер папок с помощью PowerShell”:
gci -force ‘C:\Users’-ErrorAction SilentlyContinue | ? < $_ -is [io.directoryinfo] >| % <
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % < $len += $_.length >
$_.fullname, ‘ <0:n2>GB’ -f ($len / 1Gb)
$sum = $sum + $len
>
“Общий размер профилей”,’ <0:n2>GB’ -f ($sum / 1Gb)
Итого суммарный размер всех профилей пользователей в каталоге C:\Users около 22 Гб.
Теперь выведем список пользователей, профиль которых не использовался более 60 дней. Для поиска можно использовать значение поля профиля LastUseTime.
У меня на терминальном сервере оказалось 143 профиля неактивных пользователей (общим размером около 10 Гб).
Чтобы удалить все эти профили достаточно добавить перенаправить список на команду Remove-WmiObject (перед использование скрипта удаления желательно несколько раз перепроверить его вывод с помощью параметра –WhatIf ):
Чтобы не удалять профили некоторых пользователей, например, специальные аккаунты System и Network Service, учетную запись локального администратора, пользователей с активными сессиями, список аккаунтов-исключений), нужно модифицировать скрипт следующим образом:
#Список аккаунтов, чьи профили нельзя удалять
$ExcludedUsers =»Public»,»zenoss»,»svc»,”user_1”,”user_2”
$LocalProfiles=Get-WMIObject -class Win32_UserProfile | Where <(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))>
foreach ($LocalProfile in $LocalProfiles)
<
if (!($ExcludedUsers -like $LocalProfile.LocalPath.Replace(«C:\Users\»,»»)))
<
$LocalProfile | Remove-WmiObject
Write-host $LocalProfile.LocalPath, «профиль удален” -ForegroundColor Magenta
>
>
Вы можете настроить запуск этого скрипта через shutdown скрипт групповой политики или по расписанию заданием планировщика. (перед настройкой автоматического удаления профилей внимательно протестируйте скрипт в своей среде!).
Можно модифицировать скрипт, чтобы автоматически удалять пользователи всех пользователей, которые добавлены в определенную группу AD (например, группа DisabledUsers):
Rmdir : Delete directory from command line
Do you want to delete a directory from Windows command prompt(CMD)? This post explains how to use the command rmdir to delete folders and their contents. You can also find examples for each use case of folder deletion – empty folders, non empty folders, folders with white spaced names etc.
Delete folder from CMD
Run the command rmdir on the folder.
How to delete a non empty folder
The simple rmdir does not work for folders having some content.
Use /s option to delete the folder contents along with the folder. This deletes all subfolders recursively.
Force delete a folder without confirmation
To force delete directory, without being asked for confirmation, we can use /Q switch.
We can also use ‘rd’ in place of ‘rmdir‘. Both names refer to the same command. This command works on Windows 2000, Windows XP, Server 2003, Vista, Windows 7 and 10.
Deleting directory with white spaces in the name
Rmdir can delete files with whitespaces in the name, you just need to wrap up the folder name in double quotes as shown in the below example.
Delete contents of a directory but keep the directory
The usecase here is to delete all the contents of the directory but keep the parent directory so that we do not need to create it again. rmdir /Q /S does not work here as it deletes the parent directory too. Rather the below commands should do the trick.
This works in 2 steps – the first command deletes all files, whereas the second one deletes all subdirectories.
Errors
To delete a directory, you should have appropriate access permissions on the directory. Otherwise rmdir throws ‘Access denied’ error.
Thanks dude..I was looking for command line way of deleting nonempty folders.. cheers.
Good old DOS….something tells me one day the world will be saved by a DOS operation. ; )
cannot delete… access is denied. am trying to delete a directory on a flash drive. cannot access permissions because explorer isn’t working. using win7
Note:
Don’t forget to leave a “space” in the command line..
rmdir /Q /S_“folder with spaces in the name” I meant “space”, ait’t “underscore”. And upper case of “S”. Good luck!
Hi
can you show me an example of command to delete this path in bat file.
C:\Program Files\Microsoft Office Communicator
am not able to do this . some error s
Is this in Windows 7/Vista?.
If so then you need to take ownership of the files. You can do that with below command from elevated administrator command prompt.
takeown /F «c:\Program Files\Microsoft Office Communicator» /R /A
then run the below command to delete this folder.
rmdir /S «c:\Program Files\Microsoft Office Communicator»
cd program files\microsoft office communicator
then enter press
rd /s “filename”
Then enter
I am getting the following error “The process cannot access the file because it is being us
ed by another process.” what should be the case now?
You should not have the Dir you want to delete open… Close it and then try the command again
Could you kindly post the command for deleting my folder which is at Drive G. Name of the folder is Recycler. Thanks
Thank you so much. I was trying to delete an entire directory of files, about 200k folders and files, and it kept throwing a warning “this folder is shared with other people”. No such warning with this command!
i followed your instructions but i’m getting error to delete a folder in cmd. ERROR = The system cannot find the the specified…
You should make “C:” your default Directory, tot do this type “cd.. && cd..” The type the command again but leave the “C:\” and just type the rest of the code.
It should look like this: C:>rmdir /Q /S Users\Owner\Songs\New
i have installed new win 8 n a back up of old win 8 is in c drive with a name windows old n its not being deleted by ANY means . i have tried this one as well but it says on all files access is denied
I tried the process many times but it says “access is denied”….
My entire path is “C:\program files\alwil software\avast5” . How should i delete this avast5 folder with all the folders inside it.
run cmd.exe as administrator
make sure avast service is not running
Every time I try it says the file cant be found
you’re really awesome. Googled a 1000 times just for this line
“C:\>rmdir /S nonemptydir
nonemptydir, Are you sure (Y/N)? y”
Thank you so much for your help. This changed my life.
Thank you so much for your help. This changed my life.
please attache more basic command for beginner person for my email
tnx
I need to do that, help me out
D:\abc\ has files and folders in it
but by using rd or rmdir
rmdir d:\abc\ /s /q will delete abc folder also but i don’t want this.
the asterisk stands for ‘anything’ in or below the named directory.
I want to delete subfolders of a folder older than 10 days.I am able to delete files but not folder
I wanted to know the bat file programm for deleting the contents (sub folders) of a folder on certain conditions. can anyone help.?
How to delete folders created programatically with timestamp attached at the end.
Like we do for files :
DEL comp*
Is there any command for folders:
RM com*
or
RMDIR com*
I’m wanting to delete the directory c:\windows.old I followed the instructions above I run CMD as admin, I typed in: takeown /F c:\windows.old /R /A And hit enter key. It did this part properly but Then I typed in: rmdir /Q /S c:\windows.old And after every entry it said Access denied. what is the command line/s i need to type to atlas delete the directory c:\windows.old ? (using windows 10)
I got the same problem…….
please someone help.
thank you .
i m so glad
I followed the instructions above I run CMD as admin, I typed in: takeown /F c:\windows.old /R /A And hit enter key. It did this part properly but Then I typed in: rmdir /Q /S c:\windows.old And after every entry it said Access denied. what is the command line/s i need to type to atlas delete the directory c:\windows.old ? (using windows 10.
Please somebody help………………………
takeown /f D:\OrganizationalUnit\Everyone /r /d y
icacls D:\OrganizationalUnit\Everyone /grant administrators:F /T
attrib -s -h -r D:\OrganizationalUnit\EVERYONE /s /d
forfiles /P D:\OrganizationalUnit\Everyone\ -S -M *.* /D -2 /C “cmd /c del /f /q @PATH”
forfiles /P D:\OrganizationalUnit\Everyone\ /M * /D -2 /C “cmd /c if @isdir==TRUE rmdir /S /Q @file”
Thank you very much! With these commands I could remove all “c:\Windows.old” files and directories.
Hello,
I have four folders and I want to keep two of them along with their contents and delete other two folders. How can I do that?
My Parent folder -> Folder 1 (file1.txt), Folder 2 (file2.txt), Folder 3 (file3.txt), Folder 4 (file4.txt).
Need to delete or remove 2 folders and keep 2 folder with their content.
Need command for this.
Any help will be appreciated.
Super Cool!! Deleted a stubborn non empty directory in no time. Thanks for this guide.
I have several folder: folder1, folder2, folder3
how to delete all “folder” with *
Note: This commands doest’n work:
RM folder*
or
RMDIR folder*
I want to thank you very much for the help on deleting these files. I ended up using the CMD method, but it worked perfectly. Again, thank you.
Thanks. After struggling for months and hunting the web, I was finally able to delete a folder using your advice “Deleting directory with white spaces in the name”
OMG! Thank you! Was trying to delete the remaining empty folders of an old eset nod, but couldn’t. This did the trick (hoping). I’m just wondering if its still in the background somewhere. T.hanks again
in programatically if any changes in the inner files or directory after delete the parent directory doesnot work
eg:
system(“rmdir /s/q \””d:/test/hari\””);——>it works
but after
system(“rmdir /s/q \””d:/test\””);—–>it doesn’t work
Thank you for these still useful tips.
That worked verywell. Thank You
I tried the command, but someone has created the directory repeatedly and now I can not removed the base directory. Help
E:\>rmdir /s /q thur2
thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Th
ur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur
2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\
Thur2\AC_FSQ
1.ZIP – The file name is too long.
thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Th
ur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur
2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\
Thur2\AC_HR1
1.ZIP – The file name is too long.
thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Th
ur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur
2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\
Thur2\AC_HR1
2.ZIP – The file name is too long.
The path thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2
\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\T
hur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thur2\Thu
r2\Thur2\Thur2\Thur2\AC_FSQ