CL 命令和屏幕的路径名规则

当使用 CL 命令或屏幕对对象执行操作时,您通过提供对象的路径名来标识该对象。

以下是在指定这些路径名时应记住的规则的汇总。 这些规则中的对象术语是指任何目录、文件、链接或者其他对象:

  • 通常,路径名中的所有字符必须在作业的编码字符集标识 (CCSID) 中为有效字符,或者如果作业 CCSID 为 65535,那么为作业的缺省 CCSID。 某些命令“支持 Unicode”,意味着您可以在 Unicode CCSID 中通过 QCAPCMD API 之类的界面来指定此命令和路径名。 有关详细信息,请参阅 IBM® i 信息中心中的 控制语言中的 Unicode 支持
  • 按分层顺序指定路径名,从最顶层的目录开始,以命令要对其执行操作的对象的名称结尾。 定界字符将路径名的每个组成部分隔开;例如:

    Dir1/Dir2/Dir3/UsrFile

  • 所有命令和屏幕都允许将斜杠 (/) 字符用作定界符。 大多数命令和屏幕还允许将反斜杠 (\) 字符用作定界符。 但是,一些命令和屏幕处理反斜杠 (\) 与处理任何其他字符没有区别。 因此,应谨慎使用反斜杠 (\) 字符。
  • 绝对路径名以定界符开头。 路径名解析以“根”(/) 目录开始;例如:

    /Dir1/Dir2/Dir3/UsrFile

    其中 Dir1 是“根”(/) 目录的子目录。

  • 如果路径名以波浪号 (~) 字符开头后跟定界符,那么路径名解析将以用户输入该命令的主目录开始;例如:

    '~user-profile-name/UsrDir/UsrObj'

  • 出现在除指定路径名开头处之外的任何地方的波浪号 (~) 没有特殊意义。
  • 相对路径名未以定界符或波浪号 (~) 字符开头。 路径名解析以当前目录开始;例如:

    ‘MyDir/MyFile’

    其中 MyDir 是当前目录的子目录。 使用相对路径名时必须很小心,以确保当前目录已正确设置。

  • 在命令行上输入路径名时,包含定界符、波浪号或其他特殊字符(可参阅以下)的路径名必须用单引号 (') 引起来。 在屏幕上输入路径名时,这些引号是可选的。
  • 不得在路径名的各个组成部分中使用斜杠 (/) 字符和空字符。 不得在将反斜杠 (\) 视为定界符的命令和屏幕的组成部分中使用反斜杠 (\) 字符。
  • 代码点低于十六进制 40 的字符可在命令上进行指定,但是仅在整个路径名以十六进制格式进行指定时;例如:

    CRTDIR DIR(X’02F0F1F3’)

    不建议使用此类字符。

  • 对象名在每个目录中必须唯一。
  • 命令可接受最长可达 255 个字符的组成部分名称和最长可达 5000 个字符的路径名。 但是,一些文件系统仅允许较小的组成部分名称和路径名。 它们可能还限制组成部分名称中允许的字符的长度,或者要求特殊的组成部分名称格式。 而且,路径名通常将不会由命令或屏幕本身转换为大写,但是文件系统在创建或搜索指定对象前可能会这样做。 请参阅 IBM i 信息中心的“文件系统”主题中的个别文件系统描述,以了解有关这些注意事项的更多信息。
  • 某些命令允许您指定可以使单个命令在多个对象上执行操作的模式以与指定模式相匹配。 可以在路径名的最后一个组件中使用一个或多个星号 (*) 或问号 (?)。 星号(*)匹配任何数目的字符。 问号 (?) 与任何单个字符匹配。 以下示例将在“/Dir1/Dir2/Dir3”中搜索其名称以“d”开头,并以“txt”结尾的所有对象。 可能会找到名为“dshorttxt”、“d1234.txt”甚至为“dtxt”的对象:

    '/Dir1/Dir2/Dir3/d*txt'

    以下示例将搜索其名称以“d”开头,紧接着是任意单个字符,并以“txt”结尾的对象。 可能会找到名为“d1txt”或“d.txt”,而不是“d12txt”和“dtxt”的对象:

    '/Dir1/Dir2/Dir3/d?txt'

    多个复杂的模式可使用多个星号、多个问号或者两者的组合来指定。 但是,为了避免与 i5/OS 特殊值混淆,路径名不得以单个星号 (*) 字符开始。 要在路径名开头执行模式匹配(在相对路径名中时),请使用两个星号 (*);例如:

    '**.file'

  • 如果实际组成部分名称中使用了下列任何字符,那么必须将路径名用另外若干组单引号 (') 或者双引号 (") 引起来:
    • 星号(*)
    • 问号(?)
    • 单引号 (')
    • 双引号 (")
    • 波浪号 (~)(如果用作路径名的第一个组成部分名称中的第一个字符。 如果用于任何其他位置,那么会将波浪号解释为只是另一个字符。

    例如,如果组成部分包含星号,那么此名称必须在其他引号中指定,以便星号不会解释为模式的一部分:

         '/Dir1/Dir/A*Smith'

         '''/Dir1/Dir/A*Smith'''

    如果组成部分名称本身包含单引号或双引号,那么您必须在一行中指定两个这样的标记来表示它们;例如:

         ‘”/Dir1/Dir/Smith’’s Directory”’

         ‘”/Dir1/Dir/This is an “”example”””’
  • 尽管各种文件系统、命令和屏幕可能允许在组成部分名称中具有某些特殊字符,但是您应该避免使用那些字符,因为它们可能会使您很难或无法使用其他界面来处理对象。 斜杠 (/) ,反斜杠 (\) ,星号 (*) ,问号 (?) ,单引号 (') ,双引号 ("),波浪号 (~) ,冒号 (:) 都对某些接口有特殊意义。 例如,CL 命令会将斜杠 (/) 和反斜杠 (\) 视为定界符,但是无法正确地将其解释为组成部分名称包含其中那些字符的路径。 类似地,反斜杠 (\) 或冒号 (:) 可能使用某些对象在 PC 客户机界面上无法使用。