SSIS 脚本任务使用通配符删除文件

Posted

技术标签:

【中文标题】SSIS 脚本任务使用通配符删除文件【英文标题】:SSIS Script Task Delete Files using a Wildcard 【发布时间】:2020-12-15 09:36:39 【问题描述】:

使用 SQL Server 2014 \ VS 2019。我有以下 C# 脚本任务来删除文件夹中早于 x 天的文件,这是可行的。

    public void Main()
    
        int RetentionPeriod = Convert.ToInt32(Dts.Variables["$Package::FileRententionDays"].Value.ToString());
        string directoryPath = Dts.Variables["CSV_ArchivePath"].Value.ToString();
        string[] oldFiles = System.IO.Directory.GetFiles(directoryPath, "*.*");

        foreach (string currFile in oldFiles)
        
            FileInfo currFileInfo = new FileInfo(currFile);

            if (currFileInfo.LastWriteTime < (DateTime.Now.AddDays(-RetentionPeriod)))
            
                currFileInfo.Delete();
            
        

        Dts.TaskResult = (int)ScriptResults.Success;
    

但是,我该如何修改为只是说,删除文件名以“ABC”开头的目录中的所有文件?

【问题讨论】:

查看currFileInfo.LastWriteTime的值,而不是检查currFileInfo.FileName的值 将文件名通配符更改为“ABC*.*”以仅返回匹配该模式的文件。 这些优秀的 cmets 中的任何一个都可以作为答案...... 谢谢大家,我会调查的 【参考方案1】:

在类似StartsWithPrefix 的字符串中使用“PREFIX”定义您的开头。使用String.StartsWith 方法检查FileInfo 名称是否具有满足要求所需的已定义前缀

            int RetentionPeriod = Convert.ToInt32(Dts.Variables["$Package::FileRententionDays"].Value.ToString());
            string directoryPath = Dts.Variables["CSV_ArchivePath"].Value.ToString();
            string[] oldFiles = System.IO.Directory.GetFiles(directoryPath, "*.*");

            string StartsWithPrefix = "ABC";

            foreach (string currFile in oldFiles)
            
                FileInfo currFileInfo = new FileInfo(currFile);

                if (currFileInfo.LastWriteTime < (DateTime.Now.AddDays(-RetentionPeriod)) 
                    && currFileInfo.Name.StartsWith(StartsWithPrefix))
                
                    currFileInfo.Delete();
                
            

https://docs.microsoft.com/en-us/dotnet/api/system.string.startswith?view=netcore-3.1 https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo.name?view=netcore-3.1

【讨论】:

以上是关于SSIS 脚本任务使用通配符删除文件的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL 代理运行时 SSIS 脚本任务失败

从批处理文件中删除带有通配符的文件夹 Windows 7

是否可以使用通配符删除 z/OS 上的数据集

使用通配符删除多个文件

linux下使用通配符批量删除文件

使用 SSIS 脚本任务刷新 Excel