Windows 如何从命令行删除系统驱动器中的所有文件夹

Windows 如何从命令行删除系统驱动器中的所有文件夹,windows,batch-file,cmd,Windows,Batch File,Cmd,我正试图编写一个批处理脚本,从系统驱动器中删除所有文件夹和文件(系统文件夹和文件除外),但我被文件夹位卡住了。这是针对Windows XP无人参与安装磁盘的,我集成的其中一个更新在C:\驱动器上创建了一个随机文件夹,我无法使用脚本删除该文件夹,因为名称是随机的。这就是我目前得到的: @echo off color 17 echo del-test echo. echo Hiding foders we want to keep if exist "%systemdrive%\AUTOEXEC

我正试图编写一个批处理脚本,从系统驱动器中删除所有文件夹和文件(系统文件夹和文件除外),但我被文件夹位卡住了。这是针对Windows XP无人参与安装磁盘的,我集成的其中一个更新在C:\驱动器上创建了一个随机文件夹,我无法使用脚本删除该文件夹,因为名称是随机的。这就是我目前得到的:

@echo off color 17 echo del-test echo. echo Hiding foders we want to keep if exist "%systemdrive%\AUTOEXEC.BAT" attrib +h "%systemdrive%\AUTOEXEC.BAT" if exist "%systemdrive%\CONFIG.SYS" attrib +h "%systemdrive%\CONFIG.SYS" if exist "%systemdrive%\Documents and Settings" attrib +h "%systemdrive%\Documents and Settings" if exist "%systemdrive%\Program Files" attrib +h "%systemdrive%\Program Files" if exist "%systemdrive%\Sysprep" attrib +h "%systemdrive%\Sysprep" if exist "%systemdrive%\temp" attrib +h "%systemdrive%\temp" if exist "%systemdrive%\WINDOWS" attrib +h "%systemdrive%\WINDOWS" echo Done! echo. echo Deleting everything that isn't hidden on the system drive del /q %systemdrive%\*.* dir /b c:| rd echo Done! echo. echo Unhiding Folders if exist "%systemdrive%\AUTOEXEC.BAT" attrib -h "%systemdrive%\AUTOEXEC.BAT" if exist "%systemdrive%\CONFIG.SYS" attrib -h "%systemdrive%\CONFIG.SYS" if exist "%systemdrive%\Documents and Settings" attrib -h "%systemdrive%\Documents and Settings" if exist "%systemdrive%\Program Files" attrib -h "%systemdrive%\Program Files" if exist "%systemdrive%\Sysprep" attrib -h "%systemdrive%\Sysprep" if exist "%systemdrive%\temp" attrib -h "%systemdrive%\temp" if exist "%systemdrive%\WINDOWS" attrib -h "%systemdrive%\WINDOWS" echo Done! echo. >nul pause @回音 颜色17 回声衰减试验 回声。 回声隐藏我们想要保留的东西 如果存在“%systemdrive%\AUTOEXEC.BAT”属性+h“%systemdrive%\AUTOEXEC.BAT” 如果存在“%systemdrive%\CONFIG.SYS”属性+h“%systemdrive%\CONFIG.SYS” 如果存在“%systemdrive%\Documents and Settings”属性+h“%systemdrive%\Documents and Settings” 如果存在“%systemdrive%\Program Files”属性+h“%systemdrive%\Program Files” 如果存在“%systemdrive%\Sysprep”属性+h“%systemdrive%\Sysprep” 如果存在“%systemdrive%\temp”属性+h“%systemdrive%\temp” 如果存在“%systemdrive%\WINDOWS”属性+h“%systemdrive%\WINDOWS” 回音完毕! 回声。 echo删除系统驱动器上未隐藏的所有内容 删除/q%systemdrive%\** 目录/b c:| rd 回音完毕! 回声。 回显取消隐藏文件夹 如果存在“%systemdrive%\AUTOEXEC.BAT”属性-h“%systemdrive%\AUTOEXEC.BAT” 如果存在“%systemdrive%\CONFIG.SYS”属性-h“%systemdrive%\CONFIG.SYS” 如果存在“%systemdrive%\Documents and Settings”属性-h“%systemdrive%\Documents and Settings” 如果存在“%systemdrive%\Program Files”属性-h“%systemdrive%\Program Files” 如果存在“%systemdrive%\Sysprep”属性-h“%systemdrive%\Sysprep” 如果存在“%systemdrive%\temp”属性-h“%systemdrive%\temp” 如果存在“%systemdrive%\WINDOWS”属性-h“%systemdrive%\WINDOWS” 回音完毕! 回声。 >数字停顿 顺便说一下,我只需要删除一个文件夹。谢谢

deltree /y yourDirectory


这里有另一个想法。基本上,您可以遍历
%SYSTEMDRIVE%
根目录中的所有文件/文件夹,并使用
IF
语句来保护已知的文件/文件夹。这只是一个示例,实际上没有删除任何内容,您需要修改
ECHO**Deleting%%i
行。这已经过测试,但不是很严重…请在实际删除之前进行测试

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "usebackq delims==" %%i IN (`DIR %SYSTEMDRIVE%\ /b`) DO (
  IF /I "%%i" EQU "Program Files" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Sysprep" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Temp" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Windows" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "junkfile.txt" SET DO_NOT_DELETE=Y
  IF !DO_NOT_DELETE! EQU Y (
    ECHO NOT deleting %%i
  ) ELSE (
    ECHO ** Deleting %%i **
  )
  SET DO_NOT_DELETE=
)

Thx但是
deltree
不可用,并且
del/s/a:-hc:`删除所有内容,甚至删除隐藏文件和系统文件
del/a:-hc:`不删除任何
for/d
for/f更简单。
@Raymond
/d
只返回文件夹…
/f
包括文件夹和文件。@aphoria是的,但最初的问题只需要文件夹。@Raymond不是我读的方式。他隐藏了AUTOEXEC.BAT和CONFIG.SYS以及几个文件夹。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "usebackq delims==" %%i IN (`DIR %SYSTEMDRIVE%\ /b`) DO (
  IF /I "%%i" EQU "Program Files" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Sysprep" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Temp" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "Windows" SET DO_NOT_DELETE=Y
  IF /I "%%i" EQU "junkfile.txt" SET DO_NOT_DELETE=Y
  IF !DO_NOT_DELETE! EQU Y (
    ECHO NOT deleting %%i
  ) ELSE (
    ECHO ** Deleting %%i **
  )
  SET DO_NOT_DELETE=
)