我需要一种递归删除文件夹及其子文件夹的方法。
是否有一个预先构建的工具,或者我需要编写一个?
DEL /S不删除目录。
DELTREE已从Windows 2000+中删除
我需要一种递归删除文件夹及其子文件夹的方法。
是否有一个预先构建的工具,或者我需要编写一个?
DEL /S不删除目录。
DELTREE已从Windows 2000+中删除
当前回答
对于在windows机器上安装npm包时遇到问题的任何人,如果你看到错误提示“rm -rf…”命令未找到,这是一个很重要的回答。 在windows下可以使用bash命令行执行rm命令。
对于npm用户,你可以将npm的配置更改为npm config set script-shell "C:\Program Files\Git\bin\bash.exe",这样,如果你要安装的npm包中有一个使用rm -rf命令的后安装脚本,你就可以运行那个rm命令,而不需要在npm包中更改任何内容或禁用后安装脚本配置。(例如,styles -components在安装后脚本中使用rm命令)
如果您只想使用rm命令,您可以轻松地使用bash并传递参数。
所以,是的,你可以在windows上使用'rm'命令。
其他回答
您可以在windows上安装GnuWin32并使用*nix命令。我安装这个之前,我安装任何其他在薄荷新鲜的拷贝窗口。:)
如果你使用的是旧版本的windows,还有deltree。
你可以从这里了解更多: SS64: DELTREE -删除所有子文件夹和文件。
作为旁注:
从linux版本用所有子dirs(递归)+强制删除
$ rm -rf ./path
到 PowerShell
PS> rm -r -fo ./path
它具有接近相同的参数(只是分开了)(需要-fo,因为-f可以匹配其他不同的参数)
注意:
Remove-Item ALIASE
ri
rm
rmdir
del
erase
rd
rmdir /S /Q %DIRNAME%
首先,让我们回顾一下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使用的方式正确检测成功。使用IF EXIST保护RD是必要的,因为与rm -f不同,如果目标不存在,RD将抛出一个错误。
下面的脚本片段假设DELPATH是预引用的。(当您执行SET DELPATH=%1之类的操作时,这是安全的。尝试将ECHO %1放在.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并使用它。