> For the complete documentation index, see [llms.txt](https://chaoses-ib.gitbook.io/directory-opus/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-6/readme.zh-1/internal_command_arguments.zh.md).

# 内部命令参数

内部命令集包含约 30 个命令，每个命令都可以接受一个或多个修饰其行为的参数。

例如，内部 **Copy** 命令的默认行为是将源文件夹中的选定文件复制到目标文件夹。如果你通过指定 **MOVE** 参数修改其行为，命令将移动选定文件而不是复制它们。

![](https://3597805814-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3XSZSwWow0fDf6fQJobd%2Fuploads%2Fgit-blob-a7888ab5a7c8e3c478c06acfdc96ff8f57868041%2Fcopy_vs_move.png?alt=media)

共有三种主要类型参数：

* *开关参数* 作为“开或关”选项。对于这些参数，仅在命令行中存在参数名就足以激活与该参数关联的行为。 **Copy** 命令的 **MOVE** 参数是开关参数的一个示例。因此，要将复制按钮更改为移动按钮，命令将是 **Copy MOVE**。
* *值参数* 是为命令提供值的 arguments。参数名本身没有效果 - 相反，它用于为此参数提供用户定义的值。 例如，**Copy** 命令的 **COPYATTR** 参数可以接受两个值 - **yes** 或 **no**。指定命令 **Copy COPYATTR** 将不够；相反，如果你想强制复制文件属性，则需要指定 **Copy COPYATTR=yes**。
* *可选参数* 将开关参数和值参数的行为结合在一起。可选参数可以单独出现，以激活该参数的默认行为，也可以在适当情况下用于提供值。 例如，命令 **Copy ADDTOARCHIVE** 默认为创建一个 Zip 压缩包。在这种情况下，**ADDTOARCHIVE** 充当开关。如果你想覆盖默认行为，并改为创建一个 7-Zip 压缩包，命令将是 **Copy ADDTOARCHIVE=.7z**。

### 命令模板

每个命令都有一个所谓的 *模板* - 命令接受的所有参数的完整列表。模板使用一个或多个限定符标记每个参数，以指示它是哪种类型的参数。你实际上永远不会输入这些限定符 - 它们不是参数名称的一部分，它们仅仅是参数类型的线索。例如，让我们看看 **Copy** 命令模板的开头。

ADDTOARCHIVE=ADDTOZIP/O\[,fullpaths,nofullpaths], ARCHIVE=ZIP/O\[,single,keepfolder], AS/O, BUFSIZE/K/N, BURNCD/S, CLEARREADONLY/K\[yes,no]

这不是完整的模板，只是前几个参数作为示例。让我们逐一了解它们：

* **ADDTOARCHIVE** 是一个可选参数（由 **/O** 限定符指示）。出于历史原因，一些参数具有同义词 - **ADDTOZIP** 是此参数的一个同义词。你可以互换使用任一术语，尽管此帮助文件将始终引用主参数名称。如模板所示，**ADDTOARCHIVE** 可以单独用作开关，它还可以接受修改其行为的值。它可以接受的两个关键字是 **fullpaths** 和 **nofullpaths**。如果你阅读 [**Copy**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-2/readme.zh/copy.zh.md) 命令的完整说明，你将看到你还可以提供一种压缩包类型来控制此命令创建的默认压缩包格式。此参数的值可以通过逗号分隔组合 - 例如，**Copy ADDTOARCHIVE .zip,fullpaths**。
* **ARCHIVE** 也是一个可选参数，并且也有一个同义词（**ZIP**）。
* **AS** 是一个可选参数，但模板中没有显示特定关键字。相反，此参数的值（如果提供）是完全由用户定义的。它用于在复制文件时提供新名称或通配符模式。当不使用值（**Copy AS**）时，它充当一个开关，导致 Opus 提示你为每个文件输入新名称。当使用值（例如 **Copy AS \*.bak**）时，它允许你在命令行上提供新名称，而 Opus 不会提示你输入新名称。
* **BUFSIZE** 是一个值参数（由 **/K** 限定符指示 - “K”代表“关键词”）。参数名本身没有意义 - 它后面必须跟着一个值才能产生任何效果。在这个例子中，参数用于覆盖复制文件时的默认缓冲区大小。**/N** 限定符表示提供的值必须是一个数字。例如，**Copy BUFSIZE 128000**。
* **BURNCD** 是一个开关参数（由 **/S** 限定符指示）。此参数用于使用 Windows 分段光盘刻录系统启动 CD 或 DVD 刻录。该参数不接受值，只需指定关键字就足以激活其行为。例如，**Copy BURNCD**。
* **CLEARREADONLY** 是一个值参数，模板表明它只接受两个特定关键字之一 - **yes** 或 **no**。在此特定情况下，参数用于覆盖配置选项的默认设置。如果参数值给出为 **yes**（即 **Copy CLEARREADONLY=yes**），则在从 CD 复制文件时清除只读属性，如果给出为 **no**，则不清除只读属性。如果根本没有提供参数，则使用配置标志的当前设置。

### 参数限定符

你在命令模板中看到的限定符如下。记住，你在使用参数时**永远**不会输入限定符 - 它们只是参数类型的线索。

| 限定符 | 类型  | 描述                                                                          |
| --- | --- | --------------------------------------------------------------------------- |
| /S  | 开关  | 表示开关参数（一个可以开启或关闭的布尔选项）。                                                     |
| /K  | 关键字 | 表示值参数（必须在参数关键字后提供一个值）。                                                      |
| /O  | 可选  | 表示可选参数（可以单独用作开关，或使用以下值）。                                                    |
| /N  | 数字  | 参数的值必须是一个数字。                                                                |
| /M  | 多   | 该参数可以接受多个值（例如文件列表；见下文）。                                                     |
| /R  | 原始  | <p>该参数接受“原始”值。对于这些参数，参数名称后的其余命令行都被视为值。<br>此类型的参数是唯一不需要在包含空格的值周围使用引号的参数。</p> |

一些命令还具有一个接受值的参数，但没有标记为 /K 或 /O。例如，**Copy** 命令的 **FILE** 参数允许你指定要复制的文件 - 所以显然它接受一个值，但没有标记为 /K 限定符。这是一种特殊类型的参数 - *默认参数*。在这些情况下，参数名本身的使用是可选的 - 如果需要，你可以提供它，但也可以将其省略。例如，**Copy FILE C:\foo.txt TO D:\\** 等同于 **Copy C:\foo.txt TO D:\\**。一个命令最多可以有一个默认参数。

### 命令解析和嵌入空格

在这一点上，我们应该讨论命令解析、空格和值的问题。当 Opus 解析命令行时，它会使用相应命令的模板来识别你提供的各种参数。以以下示例命令为例：

`Copy AS My Zip File.zip`

这条命令的意图显然是使用 **AS** 参数为复制的文件提供一个新名称（*我的压缩文件.zip*）。这条命令行给命令解析器带来的问题是 **ZIP** 也是 **Copy** 命令的有效参数。文件名中的嵌入空格会让命令解析器感到困惑——它无法辨别你打算将 **AS** 参数的值设为“My Zip File.zip”。

Opus 将把命令理解为包含两个参数，**AS**（值为“My”）和 **ZIP**（值为“File.zip”）。显然，如此解析命令意味着它不会按预期执行。为了避免这种困惑，只要你提供的值包含嵌入空格，**必须**用引号将其引起来。上述命令的正确形式是：

`Copy AS "My Zip File.zip"`

对命令解析器来说，这条命令很明确——它只会在命令中看到一个参数（**AS**），且其值将按预期为“My Zip File.zip”。

在引号字符串中，你可以使用两个引号字符来插入一个字面引号（VBScript 风格）。这对文件名没有用，因为文件名不能包含引号，但对诸如文件备注之类的内容很有用：

`SetAttr META "comment:This comment contains ""a quoted phrase""."`

在为参数提供值时，等号通常是可选的。也就是说，`Copy AS "My Zip File.zip"` 等同于 `Copy AS="My Zip File.zip"`。但是，在两种情况下，必须使用一种或另一种形式：

* 当你提供的参数值也是命令的另一个参数时，**必须**使用等号。例如，`Copy CREATEFOLDER sendmail` 不会按预期运行（将选定的文件复制到名为“sendmail”的新文件夹中），因为 **SENDMAIL** 也是该命令的参数。相反，你必须提供等号，如 `Copy CREATEFOLDER=sendmail`。
* 当你为 **/M** 参数提供多个值时，不得使用等号。

### 多值参数

有些参数接受多个值。例如，**Copy** 命令的 **FILE** 参数标记为 /M，表示你可以为参数提供一个或多个值。当你确实提供多个值时，每个值都必须用空格分隔。例如：

`Copy FILE D:\data\pic*.jpg "J:\image files\pic*.jpg" TO "E:\image store"`

该命令的 **FILE** 参数有两个值——**D:\data\pic\*.jpg** 和 **"J:\image files\pic\*.jpg"**（请注意第二个值周围的引号——如上所述，包含嵌入空格的值必须用引号引起来）。

为了进一步混淆，一些值参数可以接受多个关键字作为其值。你不应该将它们与 /M 参数混淆，尽管很容易混淆！例如，**Set VIEW** 命令用于更改视图模式（例如 **Set VIEW=details**），但它也可以用于在两种不同的视图模式之间切换（例如 **Set VIEW=details,power**）。在这种情况下，单个参数 (**VIEW**) 取一个值 (**details,power**) 而命令本身将此解释为多个关键字。**VIEW** 没有标记为 /M，因此命令格式 **Set VIEW details power** 将不起作用。

这种区别很细微，你真的不必担心它——每个参数都会记录它们可以接受哪种类型的值。只要意识到这种差异就足够了。

请参阅 [各个命令](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-2/readme.zh.md) 的文档，获取其参数的完整列表，以及每个参数的使用说明和示例。在许多情况下，可以一次给出多个参数，命令文档也会说明何时何地适用。
