转载请注明文章出处:https://itlanyan.com/windows-fast-delete-lots-of-files/
前提回顾
上篇“iis 503 service unavailable”刚写完没多久,忍不住又来吐槽一下坑货Windows!
故事的起因当然是从使用Windows做服务器操作系统开始,代理服务器在硬盘上缓存了几十G的数据。今天接到需求要清空文件,于是开始了痛苦的文件删除过程。
按照常规做法,shift + Del
直接物理灭绝完事。但是不争气的Windows忙着不停计算文件大小,十几分钟过去了还没开始干活!Linux上rm -rf /
分分钟能把几百G的清盘数据清空,这方面Windows这货完美阐释龟速!
解决办法
Google一下,栈爆网上的问答毫无疑问是最值得参考的。根据帖子的说法,巨硬系统上删除文件由慢到快的几种做法分别是:
- 删除到回收站,最慢最傻逼的方式;
shift + Del
,比放回收站稍微好那么一点,但也是巨慢无比。Windows会先计算文件总大小,然后再弹出确认,傻逼到极点;- 稍微好一点的就是用
rmdir
和del
命令。del
命令会留下空文件夹,强迫症可能感到不爽; - 最好的办法是先
del
,然后rmdir
,效果比直接rmdir
快三倍。具体命令是:del /f/s/q dir > null
rmdir /s/q
三个参数含义:
f: 强制删除只读文件
s: 删除子目录(即递归删除)
q: 安静模式。使用过程中务必加上此参数,不然每个文件夹都要输入Y确认一次,麻烦无比。
还有人说先安装Cygwin,然后用rm -rf
,这是最快的!个人对此表示赞同!
结果
不借助Cygwin(主要是懒得安装),先del在rmdir,发现效果也不咋滴,直接泪奔了。折腾到最后,花了几个小时才搞定,效率真TM不是一般的差。
一句话:用Windows做服务器的都是脑残、傻逼!
谁让你好好的centos不用,ubuntu不用,debian不用,非要用windows。
最害怕碰见客户的用iis
客户的机器,我也没办法
:://///////////////////////////////////////////////////////////////////////////
@echo off & setlocal
rem 以最快的速度删除某个文件夹,特别是目录结构复杂文件极多的文件夹。并确保最大程度上破坏这个文件夹中的文件,不至于被那些蛮抗的文件中断了操作
:Main
if “%~1″==”” (
endlocal & echo on & goto :eof
)
if /I “%~1″==”%windir%” (
echo You are stupid to delete this directory “%~1”
endlocal & echo on & goto :eof
)
if /I “%~1″==”%ProgramFiles%” (
echo You are stupid to delete this directory “%~1”
endlocal & echo on & goto :eof
)
if /I “%~1″==”%ProgramFiles(x86)%” (
echo You are stupid to delete this directory “%~1”
endlocal & echo on & goto :eof
)
if /I “%~1″==”%ProgramData%” (
echo You are stupid to delete this directory “%~1”
endlocal & echo on & goto :eof
)
if not exist “%~1″ (
echo folder %~1 not exist.
endlocal & echo on & goto :eof
)
set TargetDir=”%~1”
attrib -r -h -s !TargetDir! 2>nul >nul
call :QuickDelFolder !TargetDir!
if exist !TargetDir! (
call :TreeProcess !TargetDir!
rmdir /s /q !TargetDir! 2>nul >nul
)
endlocal & echo on & goto :eof
:://///////////////////////////////////////////////////////////////////////////
:TreeProcess
setlocal EnableDelayedExpansion
set “TagetFolder=%~1”
for /f “delims=*” %%f in ( ‘dir /b /A “%TagetFolder%\*” ‘ ) do (
set ThisPath=!TagetFolder!\%%f
call :IsDir “!ThisPath!” PathType
rem echo !PathType! “!ThisPath!”
if [!PathType!] equ [folder] (
call :TreeProcess “!ThisPath!”
rmdir “!ThisPath!” /s /q 2>nul >nul
if exist “!ThisPath!” (
echo rmdir “!ThisPath!” failed.
)
) else (
del /f /q “!ThisPath!” 2>nul >nul
if exist “!ThisPath!” (
echo del “!ThisPath!” failed.
)
)
)
endlocal & exit /b
:://///////////////////////////////////////////////////////////////////////////
:IsDir ThisPath resultVar [/n]
(
setlocal EnableDelayedExpansion
if [%1]==[] (
endlocal
exit /b
)
for /f “delims=*” %%i in (“%~1″) do set MyPath=”%%~fi”
if exist !MyPath! (
pushd !MyPath! 2>nul >nul
if errorlevel 1 (
set PathType=file
) else (
popd 2>nul >nul
set PathType=folder
)
) else (
set PathType=none
)
)
(
endlocal
set “%~2=%PathType%”
exit /b
)
:://///////////////////////////////////////////////////////////////////////////
:QuickDelFolder
setlocal enableExtensions
set tagetfolder=”%~1″
del /f /s /q /A %tagetfolder% 2>nul > nul
rmdir /s /q %tagetfolder% 2>nul >nul
endlocal & exit /b
:://////////////////////////////// END ////////////////////////////////////////
不明觉厉
你的“rm -rf”,不怕别人提刀上门找你请教 :DDDD
windows下用这个命令不会有效的,除非是在cygwin这种环境中
我知道,我就死给你看”rm -rf”这碗猛汤是linux专用 ^_^。我linux用过20年了。