I need a way to recursively delete a folder and its children.
Is there a prebuilt tool for this, or do I need to write one?
DEL /S
doesn't delete directories.
DELTREE
was removed from Windows 2000+
I need a way to recursively delete a folder and its children.
Is there a prebuilt tool for this, or do I need to write one?
DEL /S
doesn't delete directories.
DELTREE
was removed from Windows 2000+
RMDIR or RD if you are using the classic Command Prompt (cmd.exe):
rd /s /q "path"
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree.
/Q Quiet mode, do not ask if ok to remove a directory tree with /S
If you are using PowerShell you can use Remove-Item
(which is aliased to del
, erase
, rd
, ri
, rm
and rmdir
) and takes a -Recurse
argument that can be shorted to -r
rd -r "path"
rmdir /s /q foo\*
gives an error for syntax incorrect. –
Premonition rd /s /q foo && echo "yay"
will fail if directory "foo" doesn't exist. –
Alternately Access is denied
and others The process cannot access the file because it is being used by another process
? –
Figment if exist myfolder ( rmdir /s/q myfolder )
if you don't know whether the folder will exist or not –
Secrest help rmdir
in windows 7 indicates /S
should be used to remove the whole directory tree and /Q
should be used for quiet mode. –
Fondea The system cannot find the path specified
:C –
Doddering rd -r
out loud makes you sound like a pirate. –
Bedfellow admin:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Works for anything including sys files
EDIT: I actually found the best way which also solves file path too long problem as well:
mkdir \empty
robocopy /mir \empty folder
robocopy /mir c:\empty .
–
Cheep takeown
helped me as I copied folder from Linux system with rsync by mistake and I had no privileges to remove that folder... Not even the robocopy worked. Thanks –
Keystroke cacls "C:\B" /c /G "ADMINNAME":F /T
I get No mapping between account names and security IDs was done.
–
Berger RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree.
/Q
Quiet mode, do not ask if ok to remove a directory tree with /S
rm -r
not rm -rf
–
Waters /q
does the same thing a the -f
, so i'm not sure what you mean. –
Recoil takeown /f <folder_path> /r /d y
–
Recoil Go to the path and trigger this command.
rd /s /q "FOLDER_NAME"
/s : Removes the specified directory and all subdirectories including any files. Use /s to remove a tree.
/q : Runs rmdir in quiet mode. Deletes directories without confirmation.
/? : Displays help at the command prompt.
You can install cygwin, which has rm
as well as ls
etc.
rm -r -fo <path>
is the closest you can get in Windows PowerShell. It is the abbreviation of
Remove-Item -Recurse -Force -Path <path>
For deleting a directory (whether or not it exists) use the following:
if exist myfolder ( rmdir /s/q myfolder )
The accepted answer is great, but assuming you have Node installed, you can do this much more precisely with the node library "rimraf", which allows globbing patterns. If you use this a lot (I do), just install it globally.
yarn global add rimraf
then, for instance, a pattern I use constantly:
rimraf .\**\node_modules
or for a one-liner that let's you dodge the global install, but which takes slightly longer for the the package dynamic download:
npx rimraf .\**\node_modules
via Powershell
Remove-Item -Recurse -Force "TestDirectory"
via Command Prompt
https://mcmap.net/q/56117/-quot-rm-rf-quot-equivalent-for-windows
Try this command:
del /s foldername
First, let’s review what rm -rf
does:
C:\Users\ohnob\things>touch stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>mkdir stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>ls -l
total 0
C:\Users\ohnob\things>rm -rf stuff.txt
There are three scenarios where rm -rf
is commonly used where it is expected to return 0
:
I’m going to ignore the whole permissions thing, but nobody uses permissions or tries to deny themselves write access on things in Windows anyways (OK, that’s meant to be a joke…).
First set ERRORLEVEL
to 0 and then delete the path only if it exists, using different commands depending on whether or not it is a directory. IF EXIST
does not set ERRORLEVEL
to 0 if the path does not exist, so setting the ERRORLEVEL
to 0 first is necessary to properly detect success in a way that mimics normal rm -rf
usage. Guarding the RD
with IF EXIST
is necessary because RD
, unlike rm -f
, will throw an error if the target does not exist.
The following script snippet assumes that DELPATH is prequoted. (This is safe when you do something like SET DELPATH=%1
. Try putting ECHO %1
in a .cmd
and passing it an argument with spaces in it and see what happens for yourself). After the snippet completes, you can check for failure with IF ERRORLEVEL 1
.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
Point is, everything is simpler when the environment just conforms to POSIX. Or if you install a minimal MSYS and just use that.
As a sidenode:
From the linux version with all subdirs (recursive) + force delete
$ rm -rf ./path
to PowerShell
PS> rm -r -fo ./path
which has the close to same params (just seperated) (-fo is needed, since -f could match different other params)
note:
Remove-Item ALIASE
ri
rm
rmdir
del
erase
rd
in powershell, rm is alias of Remove-Item
, so remove a file,
rm -R -Fo the_file
is equivalent to
Remove-Item -R -Fo the_file
if you feel comfortable with gnu rm
util, you can the rm
util by choco package manager on windows.
install gnu utils in powershell using choco
:
choco install GnuWin
finally,
rm.exe -rf the_file
Here is what you need to do...
Create a batch file with the following line
RMDIR /S %1
Save your batch file as Remove.bat
and put it in C:\windows
Create the following registry key
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Launch regedit
and update the default value HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
with the following value
"c:\windows\REMOVE.bat" "%1"
Thats it! Now you can right click any directory and use the RMDIR function
LATE BUT IMPORTANT ANSWER to anyone who is having troubles installing npm packages on windows machine and if you are seeing error saying "rm -rf...
" command not found.
You can use the bash cli to run rm command on windows.
for npm users, you can change the npm's config to npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
this way if the npm package you are trying to install has a post install script that uses rm -rf
command, you will be able to run that rm
command without needing to change anything in the npm package or disabling the post install scripts config. (For example, styled-components
uses rm
command in their post install scripts)
If you want to just use the rm
command, you can easily use the bash and pass the arguments.
So yes, you can use the 'rm' command on windows.
.npmrc
globally. You can undo the solution with npm config delete script-shell
to get back as default. If you want the solution to be only local, use: npm config set script-shell "C:\Program Files\Git\bin\bash.exe" --userconfig .npmrc
This will add the .npmrc
file to your current directory. –
Prolong In powershell rm -recurse -force
works quite well.
rm
is just (one of the plenty del, erase, rd, ri, rm, rmdir
) aliases for remove-item
wich is already mentioned in answers https://mcmap.net/q/56117/-quot-rm-rf-quot-equivalent-for-windows and https://mcmap.net/q/56117/-quot-rm-rf-quot-equivalent-for-windows and the accepted answer https://mcmap.net/q/56117/-quot-rm-rf-quot-equivalent-for-windows (which does not explicitly state to use force though - but all the others do) –
Gynecology You can install GnuWin32 and use *nix commands natively on windows. I install this before I install anything else on a minty fresh copy of windows. :)
Using Powershell 5.1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
Replace logs with the directory name you want to delete.
get-childitem searches for the children directory with the name recursively from current path (.).
remove-item deletes the result.
USE AT YOUR OWN RISK. INFORMATION PROVIDED 'AS IS'. NOT TESTED EXTENSIVELY.
Right-click Windows icon (usually bottom left) > click "Windows PowerShell (Admin)" > use this command (with due care, you can easily delete all your files if you're not careful):
rd -r -include *.* -force somedir
Where somedir
is the non-empty directory you want to remove.
Note that with external attached disks, or disks with issues, Windows sometimes behaves odd - it does not error in the delete (or any copy attempt), yet the directory is not deleted (or not copied) as instructed. (I found that in this case, at least for me, the command given by @n_y in his answer will produce errors like 'get-childitem : The file or directory is corrupted and unreadable.' as a result in PowerShell)
here is what worked for me:
Just try decreasing the length of the path. i.e :: Rename all folders that lead to such a file to smallest possible names. Say one letter names. Go on renaming upwards in the folder hierarchy. By this u effectively reduce the path length. Now finally try deleting the file straight away.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\rmdir\command]
@="cmd.exe /s /c rmdir "%V""
There is also deltree if you're on an older version of windows.
You can learn more about it from here: SS64: DELTREE - Delete all subfolders and files.
© 2022 - 2024 — McMap. All rights reserved.
rmdir /S /Q
– Illuminative