有没有办法检查文件是否存在没有脚本任务?可能是foreach循环容器或其他东西..
答案 0 :(得分:2)
我想出了如何在不使用脚本任务的情况下检查文件。
1) Add a ForEach Loop Container to your Control Flow.
2) On ForEach Collection pane, set Enumerator to "Foreach File Enumerator"
3) Set Folder to your Source Folder.
4) Set Files to your File Spec (*.*).
5) On Variable Mappings, create new variable "User::FileExistsFileName"
6) You then just need to configure two output Lines for the ForEach Loop:
7) For Success Line: Double-click the Connector Line, set:
Evaluation operation: Expression
Value: Success
Expression: @[User::FileExistsFileName] != ""
8) For Failure Line, set:
Evaluation operation: Expression or Constraint
Value: Failure
Expression: @[User::FileExistsFileName] == ""
我喜欢将“失败的评估”操作设置为“表达式或约束”,只需将该行设为红色。
答案 1 :(得分:0)
如果您可以使用自定义组件,请尝试以下方法:File Properties Task。它是开源的,因此您可以准确地看到它正在做什么。您需要将它安装在您的dev和prod盒子上 - 使用安装程序或手动安装到GAC中。但是这样做,你有一个比文件系统任务更容易使用的拖放任务......但是,我有偏见......
答案 2 :(得分:0)
我只是在寻找相同的东西,以为我可以分享我最终想出的解决方案,以防万一有人仍然对此感兴趣:
我只是使用一个执行过程任务来运行一个简单的“ IF NOT EXIST”命令,处理程序包中的退出代码。
相关任务配置:
Executable:
C:\ Windows \ System32 \ cmd.exe
FailTaskIfReturnCodeIsNotSuccessValue:
是
Expressions > Arguments:
“ / C IF NOT EXIST \”“ + @ [User :: PATH_TO_FILE] +” \“(EXIT 1)else(EXIT 0)”
WindowStyle:
隐藏
MaximumErrorCount:
一个等于或大于它可能失败的数字的数字(例如,在循环中检查文件是否存在)
在执行过程任务中添加一个OnError EventHandler
,并将系统变量Propagate
设置为False
,以阻止它使失败传给父容器。
如果您不想为MaximumErrorCount
和失败的任务而烦恼,则可以简单地“回显”结果并将StdOut传递给变量,然后可以在表达式中进行检查。