我正在使用foreach循环和文件系统任务将文件移动到特定文件夹(或至少尝试)。
即
文件名可以是100000,需要转到文件夹1000 文件102000需要转到文件夹1020 文件103000需要转到文件夹1030 等等 等
我正在努力解决如何将文件移动到正确的文件夹。
我以为我可以使用一个带有上层目录的变量,后跟foreach循环中保存的filename变量的子串
e.g。
"D:\\Archive\\" + SUBSTRING(@[USER::Variable],1,4)
但这不起作用,我得到一个错误,不支持路径格式。
非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
首先,我认为错误是因为变量不仅包含文件名的完整路径,因此您必须使用类似的表达式:
"D:\\Archive\\" + LEFT(RIGHT( @[User::Variable] , FINDSTRING(REVERSE( @[User::Variable] ) , "\\", 1) - 1),4)
第一种方法 - 使用脚本任务
尝试使用脚本任务来实现此目的,只需在脚本任务中选择您的变量ReadOnlyVariable
即可。并使用类似的脚本(I Used Vb.net)
Public Sub Main()
Dim strFile As String = Dts.Variables.Item("User::Variable").ToString
Dim strFilename As String = IO.Path.GetFileName(strFile)
'Create Directory
If Not IO.Directory.Exists("D:\Archive\" & strFilename.Substring(0, 4)) Then
IO.Directory.CreateDirectory("D:\Archive\" & strFilename.Substring(0, 4))
End If
'Copy File to destination
IO.File.Copy(strFile, "D:\Archive\" & strFilename.Substring(0, 4) & "\" & strFilename)
Dts.TaskResult = ScriptResults.Success
End Sub
第二种方法 - 使用文件系统任务
创建一个新的变量@[User::DestinationPath]
并设置它的属性Evaluate As Expression
= True,然后使用以下表达式:
"D:\\Archive\\" + LEFT(RIGHT( @[User::Variable] , FINDSTRING(REVERSE( @[User::Variable] ) , "\\", 1) - 1),4)
变量截图
文件系统任务