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

时间:2016-03-01 18:02:31

标签: windows batch-file windows-server-2008

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

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

脚本:

let rules : [[string]] = [
 ["N"],
 ["N", "N"],
 ["N", "N", "N"]
];

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

set DaysOld=3
set "folders[0]=C:\Test\BatchDel\1"
set "folders[1]=C:\Test\BatchDel\2"
set "folders[2]=C:\Test\BatchDel\3"
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\1"
C:\Test\BatchDel>set "folders[1]=C:\Test\BatchDel\2"
C:\Test\BatchDel>set "folders[2]=C:\Test\BatchDel\3"
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\1" /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\2" /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\3" /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\3"
C:\Test\BatchDel>rd "C:\Test\BatchDel\2"
C:\Test\BatchDel>rd "C:\Test\BatchDel\1"
The directory is not empty.

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

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

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

编辑2:更新了输出。

1 个答案:

答案 0 :(得分:0)

我找到了这个解决方案:

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"
)