按日期将文件从一个目录复制到另一个目录

Posted

技术标签:

【中文标题】按日期将文件从一个目录复制到另一个目录【英文标题】:Copy a file from one dir to another by date 【发布时间】:2009-02-04 12:10:37 【问题描述】:

我有这个 SQL 作业(在 SQL Server 2005 中)每六 (6) 小时创建一次备份,备份的文件名基于时间戳,因此它将创建一个唯一的文件名(dbname_yyyymmddhhmmss.bak),现在我的问题是,如果文件是三天前的,我怎么知道使用 xp_cmdshell 并且根据我的脚本我想删除三天前的备份(.bak)。有人可以帮助我吗,在此先感谢。干杯!

【问题讨论】:

【参考方案1】:

我同意 xp_cmdshell 不是这项工作的最佳选择。如果你像我一样不喜欢/不信任维护计划,你可以编写一个 C# 控制台应用程序,其中文件系统支持比你在 DOS 中所做的要强得多(或使用 T-SQL 来解析输出) xp_cmdshell 'DIR ...'),然后将其安排在 Windows 计划任务中,这样您就不必担心 SQL Server 服务/代理帐户的权限升级。虽然把所有东西都放在一个包裹里很好,但你并不总是希望换油的人给你做一个乳蛋饼。

【讨论】:

【参考方案2】:

这并不是您问题的真正答案,但您可以使用维护计划(对象资源管理器 -> 管理 -> 维护计划)直接在 SqlServer 2005 中执行此操作。

我通常会创建一个维护计划,其中包括两项任务:一项“维护清理任务”会在 x 天后删除旧备份,然后是一项“备份数据库任务”。

【讨论】:

嗨 Tini,也许是这样,但您的解决方案以更有效、更安全的方式实现了原始问题中的任务目标。不要让我拿走我给你的分数;-)【参考方案3】:

这并不是真正适合 xp_cmdshell 的任务。在 SQL Server 中启用此功能也有安全隐患。

您希望实现的目标更适合 SQL Server Integration Services (SSIS)。有可用于管理和执行备份的组件,以及可用于移动和删除数据的文件系统任务组件。

您可以使用文件系统任务、变量和表达式的组合来检索备份文件名、提取日期组件并确定文件的年龄。然后您可以对文件采取适当的措施。

我希望这会有所帮助,但如果您需要更多信息,请随时提出更多问题。

干杯,约翰

【讨论】:

【参考方案4】:

您可以编写一个 .NET 程序集并从 SQL Server 中调用它。编写它是相当容易的,以便一个表值函数返回某个目录中的所有文件,并带有文件名和文件日期戳。

【讨论】:

以上是关于按日期将文件从一个目录复制到另一个目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Grunt.js 将所有文件从目录复制到另一个目录

使用 Grunt.js 将所有文件从目录复制到另一个目录

在Java中将文件从一个目录复制到另一个目录

如果文件不匹配,则递归地将一个目录复制到另一个目录

将文件从多个(指定)文件夹路径复制到另一个目录,同时保持文件结构

代码不起作用:使用 vba 将文件从一个目录复制到另一个目录