批处理文件,用于删除除最新文件夹之外的目录中的所有文件夹

时间:2015-06-14 11:20:31

标签: batch-file backup directory

我尝试在新备份完成后删除特定文件夹中的旧备份。由于我没有真正的DOS命令经验,我将在互联网上找到的几个脚本混合成一个:

::(C)2008 "BuckFix" www.winsupportforum.de
@echo off
setlocal

set workdir="M:\BACKUPS\CACHE_SSD\"
set folder=
:: get list of all folders, oldest first
dir %workdir% /AD /B /t:w /OD > %temp%folder.tmp
for /f "tokens=1* delims=" %%i in (%temp%folder.tmp) do set "folder=%%i"
del %temp%folder.tmp

::checking if its the right one...just for debugging
echo newest... %folder%

set filedir="M:\BACKUPS\CACHE_SSD\%folder%"

::delete all folders except %folder% ...but how?

pause

所以选择最新的文件夹工作正常,但我不知道如何删除除该文件夹之外的所有文件夹。我认为它只是一个简单的for循环,但到目前为止我的所有尝试都失败了。 它必须是一个安全的方法,因为它是一个备份文件夹,我只想保留最新的备份。我删除了有效的脚本但是当只有一个文件夹时它也删除了那个。当目录为空时,它会杀死整个目录。

1 个答案:

答案 0 :(得分:1)

@echo off
setlocal

set "workdir=M:\BACKUPS\CACHE_SSD\"
set "folder="
for /f "tokens=* delims=" %%i in ('dir %workdir% /AD /B /TW /O-D') do (
    set "folder=%%~fi"
    goto :break
)
:break
echo newest... %folder%

for /f "skip=1 tokens=* delims=" %%i in ('dir %workdir% /AD /B /TW /O-D') do   (
    echo rd /s /q "%%~fi"
)

pause

测试一下。实际删除命令被回显。如果一切正常,请在echo rd /s /q "%%~fi"中删除回显。