【问题标题】:SSIS script to remove date from file nameSSIS脚本从文件名中删除日期
【发布时间】:2013-12-24 15:37:20
【问题描述】:

我需要创建一个 SSIS 脚本来从文件名中删除日期。例如文件名是:TestFile_122413.CSV 我需要将其重命名为 TestFile.CSV。我不知道如何保留文件扩展名以及如何处理文件中的日期更改。我每天都会收到这个文件。这是我的代码:

`public void Main() // TODO: 在此处添加您的代码

        const string DIRECTORY_PATH = @"E:\ScriptsTest";

        //const string FILE_NAME_TEMPLATE = "SSS_PROF_010113.CSV";
        const string FILE_NAME_TEMPLATE = "*.CSV";


        if (Directory.Exists(DIRECTORY_PATH))
        {
            string[] filePathList = Directory.GetFiles(DIRECTORY_PATH);

            foreach (string filePath in filePathList)
            {
                if (File.Exists(filePath))
                {
                    File.Move(filePath, filePath.Replace(FILE_NAME_TEMPLATE, FILE_NAME_TEMPLATE.Substring(0,8)));

                }
            }
        }


    }`

【问题讨论】:

  • 文件名末尾的日期是否始终保持不变?您能否提供一些有关您尝试过的内容的背景信息?你没有问任何问题,只是陈述了一个需求。
  • 是的,日期总是相同的长度。我不知道的是如何保留文件扩展名。
  • 是的,日期总是相同的长度。我不知道如何保留文件扩展名。我每天都会收到这个文件。这是我的代码:public void Main() // TODO: 在此处添加您的代码 const string DIRECTORY_PATH = @"E:\ScriptsTest";常量字符串 FILE_NAME_TEMPLATE = "SSS_PROF_010113.CSV"; if (Directory.Exists(DIRECTORY_PATH)) {string[] filePathList = Directory.GetFiles(DIRECTORY_PATH); foreach (filePathList 中的字符串文件路径) {if (File.Exists(filePath)) {File.Move(filePath, filePath.Replace(FILE_NAME_TEMPLATE, FILE_NAME_TEMPLATE.Substring(0,9)));

标签: c# sql vbscript ssis


【解决方案1】:

这应该可行。顺便说一句,您是否尝试过使用 ForEach 任务?这可能更简单。

public void Main() 
    {
        const string DIRECTORY_PATH = @"C:\temp\";
        const string FILE_NAME_TEMPLATE = "*_??????.CSV";
        int underscoreAt = 0; 

        if (Directory.Exists(DIRECTORY_PATH))
        {
            string[] filePathList = Directory.GetFiles(DIRECTORY_PATH,FILE_NAME_TEMPLATE);

            foreach (string filePath in filePathList)
            {
                if (File.Exists(filePath))
                {
                    underscoreAt = filePath.LastIndexOf('_');

                    string newName = string.Format ("{0}.CSV", filePath.Substring(0, underscoreAt));
                    File.Move(filePath,newName );
                }
            }
        }
    }

【讨论】:

  • 当我在文件名中有一个下划线时,脚本可以很好地工作并重命名文件。现在我有一个名称中有两个下划线的文件,我如何保留第一个,我在同一目录中有两个文件,SSS_PROF_122413.CSV 和 SSS_PROM_122413.CSV,我需要删除文件日期并保留这样的文件 SSS_PROF.CSV 和SSS_PROM.CSV 谢谢
  • 修改了代码。现在试试。代码现在使用 LastIndexOf,而不是 IndexOf
【解决方案2】:

查看 SSIS File System Task。它有一个重命名文件的操作。

Here is a video on how it works.

希望这会有所帮助!

埃里克

【讨论】:

    【解决方案3】:

    试试这个,它可以编译但我没有运行它:

    public class Foo
    {
        public void Main()
        {
            const string DIRECTORY_PATH = @"E:\ScriptsTest";
            if (Directory.Exists(DIRECTORY_PATH))
            {
                string[] filePathList = Directory.GetFiles(DIRECTORY_PATH);
                foreach (string filePath in filePathList)
                {
                    if (File.Exists(filePath))
                    {
                        // Get the file name
                        string fileName = Path.GetFileName(filePath);
    
                        // Get the file extension
                        string fileExtension = Path.GetExtension(filePath);
    
                        // Get the file name without the date part
                        string fileTitle = fileName.Substring(0, fileName.IndexOf("_"));
    
                        File.Move(filePath, DIRECTORY_PATH + @"\" + fileTitle + "." + fileExtension);
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 当我在文件名中有一个下划线时,脚本可以很好地工作并重命名文件。现在我有一个名称中有两个下划线的文件,我如何保留第一个,我在同一目录中有两个文件,SSS_PROF_122413.CSV 和 SSS_PROM_122413.CSV,我需要删除文件日期并保留这样的文件 SSS_PROF.CSV 和SSS_PROM.CSV 谢谢
    • 抱歉,我忽略了这一点。而不是使用 IndexOf("_") 您可以使用 fileName.IndexOfAny(new char[] { '0', '1', '2', '3', '4', '5', '6', ' 7', '8', '9' })
    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多