批量删除旧文件和空文件夹

batch delete old files and empty folders

我有一个可以在我的本地机器上运行的批处理文件 (Windows 7),但不能在它打算运行的服务器上完全运行(Windows 2008 R2 Service Pack 1).

它需要删除所有列出的文件夹中超过指定天数的文件,然后删除空文件夹和子文件夹。

脚本:

set DaysOld=3
set "folders[0]=C:\Test\BatchDel"
set "folders[1]=C:\Test\BatchDel"
set "folders[2]=C:\Test\BatchDel"
set "folders[3]=C:\Test\BatchDel\DNE"


for /F "tokens=1* delims==" %%s in ('set folders[') do (
    forfiles /p "%%t" /s /m * /D -%DaysOld% /C "cmd /c del @path"
)

for /f "delims=" %%d in ('dir /ad/b/s ^| sort /R') do rd "%%d"
pause

当 运行 在我的本地计算机上(添加间距)时:

C:\Test\BatchDel>set DaysOld=3
C:\Test\BatchDel>set "folders[0]=C:\Test\BatchDel"
C:\Test\BatchDel>set "folders[1]=C:\Test\BatchDel"
C:\Test\BatchDel>set "folders[2]=C:\Test\BatchDel"
C:\Test\BatchDel>set "folders[3]=C:\Test\BatchDel\DNE"

C:\Test\BatchDel>for /F "tokens=1* delims==" %s in ('set folders[') do (forfiles /p "%t" /s /m * /D -3 /C "cmd /c del @path" )
C:\Test\BatchDel>(forfiles /p "C:\Test\BatchDel" /s /m * /D -3 /C "cmd /c del@path" )
ERROR: No files found with the specified search criteria.
C:\Test\BatchDel>(forfiles /p "C:\Test\BatchDel" /s /m * /D -3 /C "cmd /c del@path" )
ERROR: No files found with the specified search criteria.
C:\Test\BatchDel>(forfiles /p "C:\Test\BatchDel" /s /m * /D -3 /C "cmd /c del@path" )
ERROR: No files found with the specified search criteria.
C:\Test\BatchDel>(forfiles /p "C:\Test\BatchDel\DNE" /s /m * /D -3 /C "cmd /c del @path" )
ERROR: The specified directory does not exist.

C:\Test\BatchDel>for /F "delims=" %d in ('dir /ad/b/s | sort /R') do rd "%d"

C:\Test\BatchDel>rd "C:\Test\BatchDel"
C:\Test\BatchDel>rd "C:\Test\BatchDel"
C:\Test\BatchDel>rd "C:\Test\BatchDel"
The directory is not empty.

C:\Test\BatchDel>pause
Press any key to continue . . .

当我在服务器上 运行 它请求删除每个文件夹的权限。 (添加了间距)。

F:\data\Scripts>set DaysOld=5
F:\data\Scripts>set "folders[0]=F:\data\Environments\TestA\Cache_Data"
F:\data\Scripts>set "folders[1]=F:\data\Environments\TestB\Cache_Data"

F:\data\Scripts>for /F "tokens=1* delims==" %s in ('set folders[') do (forfiles /p "%t" /s /m * /D -5 /C "cmd /c del @path" )
F:\data\Scripts>(forfiles /p "F:\data\Environments\TestA\Cache_Data" /s /m * /D -5 /C "cmd /c del @path" )

F:\data\Environments\TestA\Cache_Data32f59d-9fd1-46ed-8579-9ebe358113fb\*, Are you sure (Y/N)?

我需要它来删除服务器上的空文件夹,而无需为每个文件夹按 Y。

编辑: 我更新了脚本。谢谢 aschipfl!现在离工作更近了。现在要求 Y/N 删除每个文件夹。

编辑 2:更新了输出。

我找到了这个解决方案:

for /F "tokens=1* delims==" %%s in ('set folders[') do (
    forfiles /p "%%t" /s /m *.* /D -%DaysOld% /C "cmd /c del @path"
    for /f "delims=" %%d in ('dir "%%t" /s /b /ad ^| sort /r') do rd "%%d"
)