执行命令

执行命令是一种工具,用来执行系统命令或具有指定命令行参数和输出机制的控制台应用程序。

注: 执行命令元素仅在您拥有配置程序模块的激活许可时才可用。

关键字

可将关键字与元素窗格上方的搜索功能配合使用。

执行命令元素的关键字有:

连接

执行命令只允许一个输出连接

属性

属性

描述

名称

画布中显示的流程元素名称

描述

画布中显示的流程元素描述。将光标悬停在流程元素上方时出现的工具提示中也会显示此描述

执行模式 该属性可帮助您配置工具以并行(同时)或串行模式处理工作:
  • 同时:选择该选项可在使用同一个应用程序时启用工具通过多个执行命令工具实例以同时处理工作。
    注:
    • 选择的应用程序应支持同时处理。
    • 使用用户首选项 > 处理页签上的同时处理任务属性设置同时处理的数量。
  • 序列化:选择该选项使工具只使用一个执行命令工具实例处理工作。

命令或路径

要执行的系统命令(只允许来自于操作系统的命令!),或要调用的控制台应用程序的绝对路径
注: 若您不知道应用程序的路径,在应用程序的文档中找到程序的路径,或在磁盘上找到应用程序。在 Windows 上,应用程序一般都安装在 C:\Program Files\ 或 C:\Program Files (x86)\。在 Mac 上,您可使用 Spotlight 查找系统文件(请参阅 http://support.apple.com/kb/HT4355)。

参数

命令行的剩余部分;在指定的文本中进行以下替换:

  • %1:输入文件/工作文件夹的绝对路径

  • %2:输出文件/工作文件夹(还不存在)的绝对路径,包括文件名和扩展名

  • %3:其中可能放置输出或临时文件的文件夹(已存在)的绝对路径

即使"输出"设置为"无"或"原始",所有这些替换也会进行(在此情况下,丢弃所生成的任何输出)

占位符(%1、%2和%3)和可能含有空格的参数数值(文件路径等)必须用引号引起!

输出

决定命令如何产生它的输出(工具将输出自动移动到输出连接):

  • 无:此命令不生成输出(或丢弃所生成的任何输出)且没有项目移动到输出连接

  • 原始:此命令不生成输出(或丢弃所生成的任何输出)且传入的工作移动到输出连接

  • 已更新输入工作:命令更新或覆盖在适当位置的传入工作

  • 结果在输入工作的旁边:此命令将输出放在输入工作的旁边(即,相同文件夹内)

  • 文件放入路径:此命令将单个输出工作放置在 %2 指定的绝对路径中

  • 文件夹放入路径:此命令将单个输出工作文件夹放在 %2 指定的绝对路径中

  • 结果在文件夹内:此命令将输出放在绝对路径 %3 中的已有文件夹内
    注: 当您在参数属性中输入 %3 时,工具创建一个名为 ExecuteCommandTemp 的临时文件夹。Switch 将整个 ExecuteCommandTemp 文件夹(而不仅仅是文件夹的内容)作为工作文件夹发送到输出连接。

复制输入工作

若设置为是,传入工作在命令触发之前被复制到临时位置;命令修改输入工作或将文件放在有输入工作的文件夹内时,必须处于打开状态

此属性在某些输出选项中不存在,因为在那些情况中必须始终复制传入的工作

输出工作过滤器

决定哪一个生成的文件或文件夹是输出文件;若只生成一个文件,则自动明确工作;否则将使用一个简单的启发进行"有根据的猜测"

输出扩展

提供给命令行的输出工作的文件扩展名(例如,%2 的替换);自动表示使用与输入工作相同的扩展名

若是以下退出代码则失败

若命令的退出代码是下列形式,则工作失败(即将工作移动到问题工作文件夹):

  • 非零

  • 负数

  • 范围内

  • 范围外

  • 忽视退出代码

范围

"n1..n2; n3..n4"指定的范围中,n 代表一个正整数或负整数,缺失表示一个开放的结尾;例如,"-7..-4; 0.."

若 stdout 含有以下内容,则工作失败

若常规控制台输出含有搜索字符串或图案,则工作失败(即将工作移动到问题工作文件夹);空表示忽略此常规控制台输出

若 stderr 含有以下内容则失败

若控制台错误输出含有搜索字符串或图案,则工作失败(即将工作移动到问题工作文件夹);空表示忽略此控制台错误输出

最佳操作

在实际配置执行命令流程元素之前,推荐您先在 Windows 的 Command Prompt 或 Mac 的 Terminal 创建一个工作命令。

记住,Command Prompt 和 Terminal 使用一个框架时,Switch 会直接执行操作系统上的命令。这会导致系统行为的区别。其中最重要的区别就是您总是需要提供完整的地址给 Switch 上的命令行应用程序,即使这在 Command Prompt 或 Terminal 上是不必要的!

对于复杂的情况,启用故障消息日志可能会有帮助(请参阅Switch 首选项:记录日志)。下表列出了运行执行命令工具时会记录的故障消息:

调试消息 含义
执行 Switch 在用实际路径替代占位符后会执行的完整命令。
结束代码 命令的结束代码。Switch 判断命令是否执行成功。
Stdout 命令执行正常时的命令输出。此输出和您在 Command Prompt 或 Terminal 上执行命令上看到的输出一致。
Stderr 出现问题时的命令输出。此输出和您在 Command Prompt 或 Terminal 上执行命令上看到的输出一致。

若以上故障消息都没有产生,操作系统执行命令失败。检查应用程序的路径是否正确且您是否拥有所需的权限。

重新引导

将命令的输出重新引导到文本文件是 Terminal 和 Command Prompt 用到的框架的特性之一,该特性无法使用 Switch 中的执行命令工具。

您可以创建一个批处理文件,以使用支持重新引导的框架来满足需要。将该批处理文件当做命令使用并将输入和输出路径作为参数发送到该批处理文件。

例如:

执行命令元素设置:

  • 命令或路径:/path/to/bash/script.sh
  • 参数:"%1"和"%2"
  • 输出:路径中的文件

Script.sh 批处理文件中的内容:

#!/bin/bash
sed "s/\&/\&/g" "${1}" >> "${2}" (This example will replace “&” with “&” in text files)

最佳操作

  • 有时在脚本表达式对话框中写入参数更有用且更容易。举例如下:
    Command or path: cp
    Arguments: Script expression defined:        
          "var destPath = "/Users/user/Desktop/dest";         
          var path = job.getPath();         
          var command = """ + path + "" "" + destPath + """;         
          command;"
  • 确认所有传递的参数是指定进程的真正参数。在以下例子中,TASKKILL 命令不是应用程序的命令。
    Command or path: C:/Program Files/Application /Application 1.0/Application/Application.exe     
    Arguments:     /t "%1" "option with space" "option with space"  TASKKILL /IM "Application.exe" <-- WRONG -->
    一个类似的错误会写入如下内容在命令提示符中:
    C:\Users\user>dir "c:\folder1\folder2" taskkill /im Application.exe <-- WRONG -->
    相反的,下面是正确的写入方法:
    C:\Users\user>dir "c:\folder1\folder2"        <-- CORRECT -->   
    C:\Users\user>taskkill /im Application.exe    <-- CORRECT -->
  • 确保使用正确的变量(%1、%2 和 %3)。举例如下:
    Command or path: tar     
    Arguments: -zxvf "%1" -C "%3"
  • 引用路径时记得使用引号引起。
    dir c:/folder/inner folder  <-- WRONG -->
    dir "c:/folder/inner folder" <-- CORRECT -->
  • 最好使用一个批处理文件或框架脚本,而非一个可执行程序或应用程序。

    这意味着"命令或路径"属性是用来选择批处理文件或框架脚本以及变量参数。所有其他参数都被放入该批处理文件或框架脚本中。该方法有以下两大优势:
    • 保持参数属性更加整洁和易读。
    • 执行命令中的可执行程序或应用程序相比在 Command Prompt 或 Terminal 窗口中使用时,会运行在不同的环境中。当和特定环境变量一起使用时,该特性是必要的。
    例如:
    Content of the shell script:
    #!/bin/bash
    export PATH="$PATH:/cygdrive/c/Program Files/MySQL/MySQSL Server 5.7/bin"
    echo $PATH
    #do everything that you want
    #start your application for example
    mysql $1
    
    Command or path: <path to bash>
    Arguments: <path to sh> <mysql arguments>
  • 您可使用"参数"属性中的 Switch 变量,因为所有的变量都会被计算且实际的值会在脚本内传递;实际上,来自"参数"属性的参数会变成脚本参数,在脚本中通过 $1、$2 等或 %1、%2 等来访问。但是将 Switch 变量写入 .sh 或 .bat 脚本是没用的,因为 Switch 不能和脚本内容一起使用。
  • 使用运行工具重新检查 Windows 上的命令和参数。例如,执行以下操作:
    1. 在系统中找到运行。
    2. 在运行中输入"cmd /K dir <目录路径>"(不带引号)。
    3. 按回车。
    4. 重新检查输出是否正确。