Windows快速删除大量文件的办法(吐槽!)

| 2018年9月23日

转载请注明文章出处:https://tlanyan.me/windows-fast-delete-lots-of-files/

前提回顾

上篇“iis 503 service unavailable”刚写完没多久,忍不住又来吐槽一下坑货Windows!

故事的起因当然是从使用Windows做服务器操作系统开始,代理服务器在硬盘上缓存了几十G的数据。今天接到需求要清空文件,于是开始了痛苦的文件删除过程。

按照常规做法,shift + Del直接物理灭绝完事。但是不争气的Windows忙着不停计算文件大小,十几分钟过去了还没开始干活!Linux上rm -rf /分分钟能把几百G的清盘数据清空,这方面Windows这货完美阐释龟速!

解决办法

Google一下,栈爆网上的问答毫无疑问是最值得参考的。根据帖子的说法,巨硬系统上删除文件由慢到快的几种做法分别是:

  1. 删除到回收站,最慢最傻逼的方式;
  2. shift + Del,比放回收站稍微好那么一点,但也是巨慢无比。Windows会先计算文件总大小,然后再弹出确认,傻逼到极点;
  3. 稍微好一点的就是用rmdirdel命令。del命令会留下空文件夹,强迫症可能感到不爽;
  4. 最好的办法是先del,然后rmdir,效果比直接rmdir快三倍。具体命令是:

    del /f/s/q dir > null
    rmdir /s/q

三个参数含义:

f: 强制删除只读文件
s: 删除子目录(即递归删除)
q: 安静模式。使用过程中务必加上此参数,不然每个文件夹都要输入Y确认一次,麻烦无比。

还有人说先安装Cygwin,然后用rm -rf,这是最快的!个人对此表示赞同!

结果

不借助Cygwin(主要是懒得安装),先del在rmdir,发现效果也不咋滴,直接泪奔了。折腾到最后,花了几个小时才搞定,效率真TM不是一般的差。

一句话:用Windows做服务器的都是脑残、傻逼!

参考

  1. https://stackoverflow.com/questions/186737/whats-the-fastest-way-to-delete-a-large-folder-in-windows/6208144

本文最后修改日期:2020年2月29日

Windows快速删除大量文件的办法(吐槽!)” 有 7 条评论

  1. 头像SW

    谁让你好好的centos不用,ubuntu不用,debian不用,非要用windows。
    最害怕碰见客户的用iis

    回复
  2. 头像Zame

    :://///////////////////////////////////////////////////////////////////////////
    @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 ////////////////////////////////////////

    回复
      1. 头像Zame

        你的“rm -rf”,不怕别人提刀上门找你请教 :DDDD

      2. 头像Zame

        我知道,我就死给你看”rm -rf”这碗猛汤是linux专用 ^_^。我linux用过20年了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注