我需要一种递归删除文件夹及其子级的方法。
是否有用于此的预构建工具,或者我需要编写一个工具吗?
DEL /S
不会删除目录。
DELTREE
已从Windows 2000+中删除
format c:
安装Linux 真的不是吗?我当然是在开玩笑。
我需要一种递归删除文件夹及其子级的方法。
是否有用于此的预构建工具,或者我需要编写一个工具吗?
DEL /S
不会删除目录。
DELTREE
已从Windows 2000+中删除
format c:
安装Linux 真的不是吗?我当然是在开玩笑。
Answers:
如果使用的是经典命令提示符(cmd.exe),则为RMDIR或RD:
rd /s /q "path"
RMDIR [/ S] [/ Q] [drive:]路径
RD [/ S] [/ Q] [驱动器:]路径
/ S除目录本身之外,还将删除指定目录中的所有目录和文件。用于删除目录树。
/ Q安静模式,不要问是否可以使用/ S删除目录树
如果你正在使用PowerShell的你可以使用Remove-Item
(这是化名为del
,erase
,rd
,ri
,rm
和rmdir
),并需要一个-Recurse
可以缩短到说法-r
rd -r "path"
rd /s /q foo && echo "yay"
如果目录“ foo”不存在,则将失败。
Access is denied
和其他The process cannot access the file because it is being used by another process
?
管理员:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
适用于任何东西,包括sys文件
编辑:我实际上找到了最好的方法,也可以解决文件路径太长的问题:
mkdir \empty
robocopy /mir \empty folder
robocopy /mir c:\empty .
takeown
当我错误地使用rsync从Linux系统复制文件夹时,这对我有所帮助,并且我没有删除该文件夹的特权...即使robocopy也无法正常工作。谢谢
转到路径并触发此命令。
rd /s /q "FOLDER_NAME"
/ s:删除指定的目录和所有子目录,包括任何文件。使用/ s删除树。
/ q:以安静模式运行rmdir。删除目录而不进行确认。
/?:在命令提示符下显示帮助。
可以接受的答案很好,但是假设您已经安装了Node,则可以使用节点库“ rimraf”(可以使用globbing模式)更加精确地进行此操作。如果您经常使用(我愿意),则只需全局安装即可。
yarn global add rimraf
然后,例如,我经常使用的模式:
rimraf .\**\node_modules
还是一种单行代码,让您避开全局安装,但是对于软件包动态下载,它花费的时间稍长一些:
npx rimraf .\**\node_modules
试试这个命令:
del /s foldername
首先,让我们回顾一下rm -rf
:
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
在以下三种情况下,rm -rf
通常会返回预期的结果0
:
我将忽略整个权限,但是没有人使用权限或试图拒绝自己对Windows中的内容进行写访问(确定,这只是在开玩笑……)。
首先将其设置ERRORLEVEL
为0,然后仅在路径存在时才删除它,并根据其是否为目录使用不同的命令。IF EXIST
不设置ERRORLEVEL
为0,如果路径不存在,所以设置ERRORLEVEL
为0第一个必要的方式模仿正常的正确检测成功rm -rf
使用。保护RD
with IF EXIST
是必要的,因为RD
和不同rm -f
,如果目标不存在,则会抛出错误。
以下脚本片段假定DELPATH已被前置。(当您执行诸如此类的操作时,这是安全的SET DELPATH=%1
。尝试放入ECHO %1
a .cmd
并将其中带有空格的参数传递给它,然后看看会自己发生什么)。摘录完成后,您可以使用来检查失败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%
关键是,当环境仅符合POSIX时,一切都会变得简单。或者,如果您安装了最小的MSYS,然后使用它。
通过Powershell
Remove-Item -Recurse -Force "TestDirectory"
通过命令提示符
自行承担风险使用。信息按“原样”提供。未经广泛测试。
右键单击Windows图标(通常为左下角)>单击“ Windows PowerShell(Admin)”>使用此命令(如果不小心,可以轻松删除所有文件):
rd -r -include *.* -force somedir
somedir
您要删除的非空目录在哪里。
请注意,对于外部连接的磁盘或有问题的磁盘,Windows有时会表现得很奇怪-删除(或任何复制尝试)时不会出错,但是不会按照指示删除(或未复制)目录。(我发现在这种情况下,至少对我而言,@ n_y在他的回答中给出的命令将产生诸如“ get-childitem:文件或目录已损坏且无法读取”之类的错误。)
但是对在Windows机器上安装npm软件包有困难的任何人,如果您看到错误提示“ rm -rf...
找不到命令” ,则是最重要的回答。您可以使用bash cli在Windows上运行rm命令。
对于npm用户,npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
如果您要安装的npm软件包具有使用命令的后安装脚本,则可以将npm的配置更改为这种方式rm -rf
,您将能够运行该rm
命令而无需更改npm软件包中的任何内容或禁用安装后脚本配置。(例如,在其安装后脚本中styled-components
使用rm
命令)
如果您只想使用rm
命令,则可以轻松使用bash并传递参数。
所以是的,您可以在Windows上使用“ rm”命令。
这是对我有用的东西:
只需尝试减少路径的长度即可。即::将所有导致该文件的文件夹重命名为最小的名称。说一个字母名称。继续在文件夹层次结构中向上重命名。这样,您可以有效地减少路径长度。现在,最后尝试立即删除文件。
如果您使用的是Windows的较旧版本,则还有deltree。
我非常喜欢该网站,用于查找命令: SS64:Del-删除文件