Tengo una carpeta llamada 'Datos' que contiene todos los archivos con fecha actual en nombre de archivo como por ejemplo 'miarchivo 20-08-2011'. Ahora quiero crear un paquete SSIS que recopile todos los archivos que son del mes 08, es decir, quiero ordenar los archivos por mes y copiarlos en una nueva carpeta llamada "august". ¿Cómo puedo hacer eso?¿Cómo creo un paquete que copie todos los archivos de una carpeta determinada en una nueva carpeta?
¿Cómo creo un paquete que copie todos los archivos de una carpeta determinada en una nueva carpeta?
Respuesta
Aquí hay una posible solución para lograr esto con la ayuda de Foreach loop container
, Script Task
y File System Task
. Puede hacerlo sin la Tarea del sistema de archivos. Sin embargo, lo he usado para hacer uso de la tarea integrada de flujo de control para mover los archivos. El ejemplo se creó utilizando SSIS 2005
.
El ejemplo asume que los archivos se nombrarán uniformemente. Por lo tanto, el ejemplo usa el formato Archivo DD-MM-YYYY. Por ejemplo, los archivos se llamarán File 29-07-2011
, File 15-08-2011
etc.
En el paquete SSIS, cree las siguientes variables. En este ejemplo, los archivos fuente se almacenan en la ubicación de la carpeta F:\Temp\
y los archivos se deben mover a la ubicación * F: \ Temp \ Monthwise *. Dentro de la carpeta de destino, habrá carpetas para cada mes como julio, agosto etc.
DestinationFolder variable se mantenga el valor final carpeta de destino como
F:\Temp\Monthwise\August
pero esta variable se asigna con el valor real dentro de la Tarea de script Por ahora, asignemos el valorF:\Temp\Monthwise\
. Este valor temporal es evitar que File System Task genere mensajes de error en el momento del diseño.DestinationRoot contendrá la carpeta raíz real bajo la cual se deben crear las carpetas como julio, agosto en función de los nombres de los meses.
SourceFolder indica la carpeta en la que se almacenan inicialmente todos los archivos. Aquí, en este ejemplo, la carpeta de origen será
F:\Temp\
sourcefilepath indica la ruta del archivo real. Esta variable se asignará con los valores de archivo individuales cuando el contenedor de bucles Foreach recorre cada variable. Para evitar que la tarea del sistema de archivos genere mensajes de error en el momento del diseño, vamos a asignarle un valor ficticio
F:\Temp\1.txt
.FilePattern define el patrón de archivo que se debe recorrer en la ruta de la carpeta de origen. Vamos a asignar
*.*
, lo que significa que todos los archivos se pasarán en bucle. También puede especificar*.txt
oFile*.txt
oMy*.xls
etc. Está a la altura de sus requisitos.MonthStartPosition indica la posición donde el valor del mes comienza en el nombre del archivo. Por lo tanto, en el formato de nombre de archivo
File 29-07-2011
, el mes 07 comienza en el noveno carácter. De ahí el valor 9.MonthLength especifica el número de caracteres para extraer.De todos modos, esto será de 2 caracteres, pero no quería el código difícil. Entonces, creé una variable.
MonthNameFormat especifica cómo se deben crear las carpetas. Valor MMMM denota que creará las carpetas con nombres completos de mes como enero, febrero, etc. Si usamos el valor MMM, las carpetas se crearán como enero, febrero, etc. Las carpetas se crearán solo si no existieran.
En control de flujo pestaña del paquete SSIS, colocar una Foreach loop container
y configurarlo para colocar a través de la carpeta especificada en la variable SourceFolder
utilizando el patrón de archivo de variables FilePattern
. A medida que el contenedor de bucles Foreach recorre los archivos, los nombres de los archivos se asignarán a la variable SourceFilePath. Usaremos esta variable para obtener el valor del mes en Tarea de Script.
Dentro del contenedor de bucle Foreach, coloque un botón ... Script Task
y la sección de secuencias de comandos de la tarea Script haga clic en el script de Diseño para abrir el editor de VSTA y pegar el código proporcionado después de estas capturas de pantalla. Como el ejemplo se creó en VS 2005, el código está escrito en VB.NET porque es el único idioma admitido en SSIS 2005
.
Código tarea Script: El código obtiene el valor ruta completa del archivo de la variable SourceFilePath
y extrae sólo el nombre de archivo para almacenarlo en la variable local FileName
.
A continuación, verifica si las variables MonthStartPosition
y MonthLength
tienen asignados valores propios distintos de cero. Luego extrae el valor del mes para almacenarlo en la variable local MonthValue
.
Al utilizar MonthValue
, recupera el valor del nombre de mes completo con la función DateTime. Los valores 1 están asignados a día y año porque solo queremos el nombre del Mes.
El nombre del mes en la variable local NombreCarpeta se combina con el valorDestinationRoot para comprobar si existe o no la carpeta. Si la carpeta no existe, la carpeta se creará para que la Tarea del sistema de archivos no falle.
Finalmente, el valor de la carpeta de destino completo se asigna a la variable del paquete DestinationFolder
. Esta variable se usará en la Tarea del sistema de archivos.
VB.NET code for SSIS 2005
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
Public Sub Main()
Dim varCollection As Variables = Nothing
Dts.VariableDispenser.LockForRead("User::SourceFilePath")
Dts.VariableDispenser.LockForRead("User::DestinationRoot")
Dts.VariableDispenser.LockForRead("User::MonthStartPosition")
Dts.VariableDispenser.LockForRead("User::MonthLength")
Dts.VariableDispenser.LockForRead("User::MonthNameFormat")
Dts.VariableDispenser.LockForWrite("User::DestinationFolder")
Dts.VariableDispenser.GetVariables(varCollection)
Dim SourceFilePath As String = varCollection("User::SourceFilePath").Value.ToString()
Dim FileName As String = SourceFilePath.Substring(SourceFilePath.LastIndexOf("\") + 1)
Dim DestinationRoot As String = varCollection("User::DestinationRoot").Value.ToString()
Dim MonthStartPosition As Integer = Convert.ToInt32(varCollection("User::MonthStartPosition").Value)
Dim MonthLength As Integer = Convert.ToInt32(varCollection("User::MonthLength").Value)
Dim MonthValue As Integer = 0
Dim MonthNameFormat As String = varCollection("User::MonthNameFormat").Value.ToString()
Dim FolderName As String = String.Empty
Dim MonthwiseDirectory As String = String.Empty
If MonthStartPosition > 0 AndAlso MonthLength > 0 Then
MonthValue = Convert.ToInt32(FileName.Substring(MonthStartPosition - 1, MonthLength))
End If
If FileName.Length > 0 AndAlso MonthValue > 0 Then
FolderName = New DateTime(1, MonthValue, 1).ToString(MonthNameFormat)
End If
MonthwiseDirectory = System.IO.Path.Combine(DestinationRoot, FolderName)
If Not System.IO.Directory.Exists(MonthwiseDirectory) Then
System.IO.Directory.CreateDirectory(MonthwiseDirectory)
End If
varCollection("User::DestinationFolder").Value = MonthwiseDirectory
Dts.TaskResult = Dts.Results.Success
End Sub
End Class
C# code for SSIS 2008 and above
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::SourceFilePath");
Dts.VariableDispenser.LockForRead("User::DestinationRoot");
Dts.VariableDispenser.LockForRead("User::MonthStartPosition");
Dts.VariableDispenser.LockForRead("User::MonthLength");
Dts.VariableDispenser.LockForRead("User::MonthNameFormat");
Dts.VariableDispenser.LockForWrite("User::DestinationFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
string SourceFilePath = varCollection["User::SourceFilePath"].Value.ToString();
string FileName = SourceFilePath.Substring(SourceFilePath.LastIndexOf('\\') + 1);
string DestinationRoot = varCollection["User::DestinationRoot"].Value.ToString();
int MonthStartPosition = Convert.ToInt32(varCollection["User::MonthStartPosition"].Value);
int MonthLength = Convert.ToInt32(varCollection["User::MonthLength"].Value);
int MonthValue = 0;
string MonthNameFormat = varCollection["User::MonthNameFormat"].Value.ToString();
string FolderName = string.Empty;
string MonthwiseDirectory = string.Empty;
if (MonthStartPosition > 0 && MonthLength > 0)
{
MonthValue = Convert.ToInt32(FileName.Substring(MonthStartPosition - 1, MonthLength));
}
if (FileName.Length > 0 && MonthValue > 0)
{
FolderName = new DateTime(1, MonthValue, 1).ToString(MonthNameFormat);
}
MonthwiseDirectory = System.IO.Path.Combine(DestinationRoot, FolderName);
if (!System.IO.Directory.Exists(MonthwiseDirectory))
{
System.IO.Directory.CreateDirectory(MonthwiseDirectory);
}
varCollection["User::DestinationFolder"].Value = MonthwiseDirectory;
Dts.TaskResult = (int)ScriptResults.Success;
}
Dentro del contenedor de bucle Foreach, colocar de archivos del sistema de tareas después de la tarea Script. Configure la tarea del sistema de archivos como se muestra en la captura de pantalla.
Una vez que las tareas de paquetes se configuran, la ficha Flujo de control debe ser similar a como se muestra a continuación.
Vamos a probar el paquete. Antes de eso, los contenidos de la carpeta de origen F: \ Temp se muestran a continuación. Los archivos son ficticios. Por lo tanto, el tamaño 0 KB.
A continuación pantalla muestra la ejecución exitosa del paquete.
A continuación capturas de pantalla muestran cómo los archivos se han movido a la carpeta de destino correspondiente que se han creado en base a los nombres de los meses. El contenido de las carpetas individuales se muestra a continuación.
Espero que ayude.
- 1. Buscar todos los archivos en una carpeta
- 2. Applescript Copie el archivo a una nueva carpeta
- 3. ¿Cómo recorro todos los archivos en una carpeta usando C?
- 4. ¿Cómo muevo una carpeta debajo de una nueva carpeta en un proyecto de equipo TFS?
- 5. ¿Cómo crear una nueva carpeta?
- 6. mover todos los archivos en una carpeta a otra?
- 7. ¿Cómo señalo una carpeta como un paquete?
- 8. macro - abrir todos los archivos en una carpeta
- 9. Fuerza Borrar todos los archivos de una carpeta
- 10. Cómo recopilar todos los archivos en una carpeta y sus subcarpetas que coincidan con una cadena
- 11. Impedir el acceso a archivos en una carpeta determinada
- 12. Google Apps Script: ¿Cómo creo un archivo en una carpeta?
- 13. Eliminar carpeta y todos los archivos/subdirectorios
- 14. Obtener archivos en una carpeta
- 15. ¿Cómo puedo hacer que MSBuild copie todos los archivos marcados como Contenido en una carpeta, preservando la estructura de la carpeta?
- 16. Copie los permisos de una carpeta de Windows a otra
- 17. Mueva todos los archivos de una carpeta a otra carpeta con java
- 18. ¿Cómo obtener la lista de archivos con una extensión específica en una carpeta determinada?
- 19. ¿Cómo creo una carpeta en VB si no existe?
- 20. C# eliminar una carpeta y todos los archivos y carpetas dentro de esa carpeta
- 21. Lista de todos los recursos incrustados en una carpeta
- 22. Copie un archivo de una carpeta a otra utilizando vbscripting
- 23. listando todos los contenidos de una carpeta en tfs
- 24. ¿Cómo puedo reemplazar una palabra todos los archivos dentro de una carpeta en Vim?
- 25. Android, ¿cómo puedo obtener una lista de todos los archivos en una carpeta?
- 26. ¿Cómo copio la información de seguridad cuando creo una nueva carpeta?
- 27. ¿Cómo extiendo una expresión regular para excluir todos los archivos en una carpeta?
- 28. Archivo de proceso por lotes para ejecutar todos los archivos en una carpeta
- 29. Gancho git post-commit simple para copiar archivos comprometidos en una carpeta determinada
- 30. Cómo eliminar todos los archivos y carpetas en una carpeta mediante una llamada a cmd