Tôi có một thư mục có tên 'Dữ liệu' có chứa tất cả các tệp có ngày hiện tại trong tên tệp như ví dụ 'myfile 20-08-2011'. Bây giờ tôi muốn tạo một gói SSIS thu thập tất cả các tệp từ tháng 08, tức là, tôi muốn phân loại tệp theo tháng khôn ngoan và sao chép các tệp đó vào một thư mục mới có tên là "august". Làm thế nào tôi có thể làm điều đó?Làm cách nào để tạo một gói có thể sao chép tất cả các tệp từ một thư mục nhất định sang một thư mục mới?
Trả lời
Dưới đây là một giải pháp khả thi để đạt được điều này với sự trợ giúp của Foreach loop container
, Script Task
và File System Task
. Bạn có thể thực hiện tác vụ này mà không cần tệp Hệ thống tệp. Tuy nhiên, tôi đã sử dụng nó để tận dụng nhiệm vụ dòng điều khiển được xây dựng sẵn để di chuyển các tệp. Ví dụ này được tạo bằng cách sử dụng SSIS 2005
.
Ví dụ giả định rằng các tệp sẽ được đặt tên thống nhất. Vì vậy, ví dụ sử dụng định dạng Tệp DD-MM-YYYY. Ví dụ: các tệp sẽ được đặt tên là File 29-07-2011
, File 15-08-2011
v.v.
Trên gói SSIS, hãy tạo các biến sau. Trong ví dụ này, các tệp nguồn được lưu trữ ở vị trí thư mục F:\Temp\
và các tệp sẽ được di chuyển đến vị trí * F: \ Temp \ Monthwise *. Trong thư mục đích, sẽ có thư mục cho mỗi tháng như Bảy, Tám, vv
DestinationFolder biến sẽ giữ giá trị thư mục đích cuối cùng như
F:\Temp\Monthwise\August
nhưng biến này sẽ được gán với giá trị thực tế bên trong Tác vụ tập lệnh. Bây giờ, hãy gán giá trịF:\Temp\Monthwise\
. Giá trị tạm thời này là để tránh tệp hệ thống tác vụ từ việc ném thông báo lỗi vào thời gian thiết kế.DestinationRoot sẽ chứa thư mục gốc thực tế mà theo đó các thư mục như tháng 7, tháng 8 sẽ được tạo dựa trên tên tháng.
SourceFolder biểu thị thư mục trong đó tất cả các tệp được lưu trữ ban đầu. Ở đây trong ví dụ này, thư mục nguồn sẽ là
F:\Temp\
SourceFilePath biểu thị đường dẫn tệp thực tế. Biến này sẽ được gán với các giá trị tệp riêng lẻ khi vùng chứa vòng lặp Foreach lặp qua từng biến. Để tránh Tác vụ Hệ thống Tệp từ việc gửi thông báo lỗi vào lúc thiết kế, hãy gán nó với một số giá trị giả
F:\Temp\1.txt
.FilePattern xác định mẫu tệp sẽ được lặp qua trong đường dẫn thư mục nguồn đã cho. Hãy gán
*.*
, có nghĩa là tất cả các tệp sẽ được lặp qua. Bạn cũng có thể chỉ định*.txt
hoặcFile*.txt
hoặcMy*.xls
v.v. Đó là tối đa các yêu cầu của bạn.MonthStartPosition biểu thị vị trí nơi giá trị tháng bắt đầu trong tên tệp. Vì vậy, ở định dạng tên tệp
File 29-07-2011
, tháng 07 bắt đầu ở ký tự thứ 9. Do đó giá trị 9.MonthLength chỉ định số ký tự cần trích xuất.Điều này sẽ anyways được 2 ký tự nhưng tôi không muốn mã cứng. Vì vậy, tôi đã tạo một biến.
MonthNameFormat chỉ định cách tạo thư mục. Giá trị MMMM biểu thị rằng nó sẽ tạo ra các thư mục có tên tháng đầy đủ như tháng 1, tháng 2 vv. Nếu chúng ta sử dụng giá trị MMM, các thư mục sẽ được tạo thành Jan, Feb etc. Các thư mục sẽ chỉ được tạo nếu chúng không tồn tại.
On Flow Control tab gói của SSIS, đặt một Foreach loop container
và cấu hình nó để lặp qua các thư mục quy định trong biến SourceFolder
sử dụng mô hình tập tin biến FilePattern
. Khi vòng lặp Foreach lặp qua các tệp, tên tệp sẽ được gán cho biến SourceFilePath. Chúng ta sẽ sử dụng biến này để tìm nạp giá trị tháng trong Script Task.
Trong thùng chứa vòng lặp foreach, đặt một nút ... Script Task
và trên phần Script nhiệm vụ kịch bản của kích kịch bản thiết kế để mở trình soạn thảo VSTA và dán mã được cung cấp sau các ảnh chụp màn hình này. Kể từ khi ví dụ được tạo trong VS 2005, mã được viết bằng VB.NET vì đó là ngôn ngữ được hỗ trợ duy nhất trong SSIS 2005
.
Script công tác Mã số: Các mã được tập tin giá trị đường dẫn đầy đủ từ biến SourceFilePath
và chiết xuất chỉ có tên tập tin để lưu trữ nó trong biến cục bộ FileName
.
Sau đó kiểm tra xem các biến số MonthStartPosition
và MonthLength
có được gán với các giá trị khác không. Sau đó nó trích xuất giá trị tháng để lưu trữ nó trong biến cục bộ MonthValue
.
Sử dụng MonthValue
, nó lấy giá trị tên đầy đủ tháng bằng hàm DateTime. Các giá trị 1 được gán cho ngày và năm bởi vì chúng tôi chỉ muốn tên Tháng.
Tên tháng trong biến cục bộ Tên thư mục được kết hợp với giá trị DestinationRoot để kiểm tra xem thư mục có tồn tại hay không. Nếu thư mục không tồn tại, thư mục sẽ được tạo để Tác vụ Hệ thống Tệp không thành công.
Cuối cùng, giá trị thư mục đích đầy đủ được gán cho biến gói DestinationFolder
. Biến này sẽ được sử dụng trong Tác vụ Hệ thống Tệp.
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;
}
Trong thùng chứa vòng lặp foreach, đặt File System tác sau khi nhiệm vụ Script. Cấu hình nhiệm vụ hệ thống tệp như được hiển thị trong ảnh chụp màn hình.
Khi nhiệm vụ gói được cấu hình, tab Flow Control sẽ giống như như hình dưới đây.
Hãy kiểm tra gói. Trước đó, nội dung của thư mục nguồn F: \ Temp được hiển thị bên dưới. Các tập tin là giả. Do đó, kích thước 0 KB.
Ảnh chụp màn hình bên dưới cho thấy việc thực hiện thành công gói.
Dưới ảnh chụp màn hình hiển thị như thế nào các tập tin đã được chuyển đến thư mục đích tương ứng đã được tạo ra dựa trên các tên tháng. Nội dung của các thư mục cá nhân được hiển thị bên dưới.
Hy vọng điều đó sẽ hữu ích.
- 1. Làm cách nào để sao chép các tệp của tôi từ một thư mục này sang một thư mục khác?
- 2. VBA để sao chép tệp từ một thư mục này sang một thư mục khác
- 3. Cách tạo một hàm đệ quy để sao chép tất cả các tệp và thư mục
- 4. Làm thế nào để sao chép hiệu quả tất cả các tệp từ một thư mục này sang thư mục khác trong thùng chứa aazon S3 bằng boto?
- 5. Sao chép nội dung của một thư mục này sang một thư mục khác
- 6. Làm cách nào để sao chép 10 tệp gần đây nhất từ thư mục này sang thư mục khác?
- 7. cách xóa tất cả các tệp trừ ba tệp mới nhất trong một thư mục
- 8. Làm cách nào để xóa các tệp trong thư mục được sao chép từ một thư mục khác?
- 9. linux bash - xóa tất cả các tệp nằm trong một thư mục từ một thư mục khác
- 10. Cách sao chép tệp từ một thư mục sang thư mục khác bằng cách tạo thư mục nếu thư mục đó không tồn tại
- 11. Tạo một thư mục con cho tất cả các thư mục trong thư mục
- 12. Cách tốt nhất để sao chép thư mục và tất cả thư mục con và tệp bằng C#
- 13. Sao chép tất cả các tập tin trong thư mục
- 14. Trong FTP, làm cách nào để sao chép tệp từ xa sang các thư mục khác
- 15. Bash: scp tất cả các tệp trong một thư mục, nhưng không phải thư mục con
- 16. Xóa tất cả các tệp git khỏi một thư mục?
- 17. Cách sao chép tệp từ thư mục sang thư mục khác
- 18. Sao chép tập tin vào một thư mục mới
- 19. Ant - sao chép tệp và thư mục con từ chỉ một thư mục con trên cây
- 20. Trong Java, tôi có nên tạo một Gói, Thư mục hoặc Thư mục Nguồn mới không?
- 21. Hợp nhất tất cả các tệp trong một thư mục thành một tệp bằng bash
- 22. Android, làm cách nào để có danh sách tất cả các tệp trong một thư mục?
- 23. Mở tất cả các tệp trong một thư mục
- 24. Sao chép tệp từ thư mục này sang thư mục khác bằng cách sử dụng vbscripting
- 25. iPhone (iOS): sao chép các tệp từ gói chính sang lỗi thư mục tài liệu
- 26. Làm thế nào để di chuyển tất cả các tệp của một thư mục vào nhiều thư mục với một số lượng tệp nhất định?
- 27. Hadoop sao chép một thư mục?
- 28. Sao chép thư mục sang một ổ đĩa khác
- 29. làm thế nào để liệt kê tất cả các thư mục con trong một thư mục
- 30. Tìm kiếm một thư mục và tất cả các thư mục con của nó đối với các tệp thuộc một loại nhất định