У меня есть каталог с 5 файлами, содержащими информацию о дате и времени.Мне нужно убрать дату и время из каждого файла и переименовать каждый файл в понятное имя.
У меня проблемы со структурой этой задачи, но я думаю, что мне нужно использовать цикл, который используется в задаче сценария для условного переименования файла, но я не нашел много примеров в Интернете.которые выполняют эту функцию.
Я также рассмотрел задачу сценария, которая переименовывает все файлы в каталоге одновременно.
Любое руководство было бы замечательно.
Я пытался использовать цикл foreach SSIS с файловыми задачами, которые перемещают и переименовывают файлы, но это неуклюже.«Раз и навсегда» звучит в моей голове, но у меня возникают проблемы при разработке эффективного способа сделать это.
Нет кода, который работает на этот пост.
Я хотел бы переименовать каждый файл на основе частичного совпадения имен, чтобы каталог назначения содержал чистые имена файлов, исключающие ненужную информацию о дате.
Допустим, файлы имеют следующие имена: «Тест EOY 01012018.xls», «Тест PLA 01022018.xls», «Тест 01032018 SHA.xls», «Тест EAD 01042018.xls», «Тест DOY 01052018.xls»."
Я хочу условно переименовать каждый файл, найдя часть его имени: Примеры: если fileName, например," EOY Test ", то" EOY_Test.XLS ", если fileName, например," Test PLA ", то" PLA_Test.XLS "и т. Д....
ОБНОВЛЕНИЕ: Мне пришлось изменить код, чтобы также удалить точки и несколько других символов из имени файла.Также добавлены новая переменная и строка directoryinfo для учета исходной и целевой папок.Вот модифицированный код из ответа @ userfl89:
string fileDirectory_Source = Dts.Variables["User::PayrollSourceFilePath"].Value.ToString();
string fileDirectory_Dest = Dts.Variables["User::PayrollDestFilePath"].Value.ToString();
DirectoryInfo dirInfo_Source = new DirectoryInfo(fileDirectory_Source);
DirectoryInfo dirInfo_Dest = new DirectoryInfo(fileDirectory_Dest);
///
///int i = 1;
foreach (FileInfo fi in dirInfo_Source.EnumerateFiles())
{
///Replace(" ", "_") + i
string newFileName = Regex.Replace(Path.GetFileNameWithoutExtension(fi.Name), "[0-9]|[.,/ -]", "").TrimEnd()+ fi.Extension;
fi.MoveTo(dirInfo_Dest + newFileName);
///i++;
}
ОБНОВЛЕНИЕ 2: Это ошибка, которую я получаю:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()