1.先启用 xp_cmdshell 扩展存储过程:
Use
Master
GO
Exec
sp_configure
'
show advanced options
'
,
1
GO
Reconfigure
;
GO
sp_configure
'
xp_cmdshell
'
,
1
GO
Reconfigure
;
GO
(注:因为xp_cmdshell是高级选项,所以这里启动xp_cmdshell,需要先将 show advanced option 设置为 1,便可显示高级配置选项。
可以通过语句
Select
is_advanced
From
sys.configurations
Where
name
=
N
'
xp_cmdshell
'
查看是否高级选项。
)
2.删除文件的存储过程:
If
object_id
(
'
sp_DeleteFiles
'
)
Is
Not
Null
Drop
Proc
sp_DeleteFiles
Go
Create
Proc
sp_DeleteFiles
(
@FilePath
nvarchar
(
128
),
@SearchPattern
nvarchar
(
200
),
@LastWriteTimeStart
datetime
,
@LastWriteTImeEnd
datetime
)
As
Set
Nocount
On
Declare
@Cmd
nvarchar
(
2000
),
@OutputInfo
nvarchar
(
2000
),
@Dir
nvarchar
(
2000
),
@Date
datetime
,
@FileName
nvarchar
(
512
)
Declare
@Tmp
Table
(ID
int
Identity
(
1
,
1
)
Primary
Key
, OutputInfo
nvarchar
(
2000
))
Set
@Cmd
=
N
'
Dir/A:-d/S/T:W/4
'
+
@FilePath
+
N
'
/
'
+
Rtrim
(
@SearchPattern
)
/*
Dos显示文件代码
*/
Insert
Into
@Tmp
Exec
xp_cmdshell
@Cmd
Declare
Cur_dir
Cursor
For
Select
OutputInfo
From
@tmp
Where
Patindex
(
'
%/%
'
,OutputInfo)
>
0
Or
IsDate
(
substring
(OutputInfo,
1
,
10
))
=
1
/*
过滤只留目录和文件列表
*/
Open
Cur_dir
Fetch
Next
From
Cur_dir
Into
@OutputInfo
While
@@Fetch_Status
=
0
Begin
If
Patindex
(
'
%/%
'
,
@OutputInfo
)
>
0
/*
提取目录
*/
Set
@Dir
=
Substring
(
@OutputInfo
,
1
,
Len
(
@OutputInfo
)
-
Charindex
(
Char
(
32
),
Reverse
(
@OutputInfo
)))
Else
Begin
Set
@Date
=
Substring
(
@OutputInfo
,
1
,
10
)
If
@Date
Between
@LastWriteTimeStart
And
@LastWriteTImeEnd
Begin
/*
不同的环境,如在繁体系统,这里取文件名的处理方法可能不同
*/
Set
@OutputInfo
=
Stuff
(
@OutputInfo
,
1
,
17
,
''
)
/*
过滤掉日期部分
*/
Set
@OutputInfo
=
Stuff
(
@OutputInfo
,
1
,
Patindex
(
'
%[0-9]%
'
,
@OutputInfo
)
-
1
,
''
)
/*
过滤掉前缀的空格部分
*/
Set
@FileName
=
Stuff
(
@OutputInfo
,
1
,
Charindex
(
Char
(
32
),
@OutputInfo
),
''
)
/*
取得文件名
*/
Set
@Cmd
=
N
'
Del
'
+
@Dir
+
N
'
/
'
+
@FileName
Exec
xp_cmdshell
@Cmd
,No_output
Print
N
'
已删除文件:
'
+
@Dir
+
N
'
/
'
+
@FileName
End
End
Fetch
Next
From
Cur_dir
Into
@OutputInfo
End
Close
Cur_dir
Deallocate
Cur_dir
Go
3. 测试:
Exec
sp_DeleteFiles
'
F:/test
'
,
'
*.exe
'
,
'
20011001
'
,
'
20091119
'
/*
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_071101.exe
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_080127.exe
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_080326.exe
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_080328.exe
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_080504.exe
已删除文件: F:/test/Gao/高2009-8-14/B2000HR_FuXing_CHN_060406/HR_FuXing_080628.exe
*/