宁德市网站建设_网站建设公司_Angular_seo优化
2025/12/24 7:05:00 网站建设 项目流程

Windows Shell脚本编程入门指南

1. 项目预览:不可预测的命令提示符

“不可预测的命令提示符”项目展示了如何随机改变Windows命令控制台的外观。该脚本可定制的Windows命令控制台特性包括前景色和背景色、标题栏显示的文本、命令提示符的格式,以及命令控制台首次出现时显示的初始消息。

每次执行“不可预测的命令提示符”脚本时,它会随机配置三组不同的设置之一。例如:
- 场景一:用户可能会被直呼其名,并收到“好好编码,繁荣发展”的提示。命令控制台中的文本以绿色显示在黑色背景上。
- 场景二:用户会看到消息“你好。今天很高兴与你一起工作!”。此外,前景文本颜色变为黄色,命令提示符会显示星期几和日期。
- 场景三:显示文本消息“ Boo!我吓到你了吗?”,文本以黑色字符显示在黄色背景上。

这个脚本还让你初步了解了其他一些重要的Windows shell脚本技术,包括将数据存储在变量中、使用条件逻辑控制脚本执行,以及进行数值比较。

2. 命令外壳命令语法

Windows shell提供了一个使用基于文本的命令和实用程序的接口,同时也用于运行Windows shell脚本。Windows shell集成了Windows shell脚本语言,该语言包含大量语句。

每个Windows命令都有其独特的语法,必须严格遵循才能使命令正常工作。不过,所有Windows命令都遵循一个通用格式,如下所示:

Command Arguments Switch Modifier Switch Parameter cmd /t:70 /k dir

要从Windows命令提示符执行Windows命令,需输入命令名称,后跟一个或多个可选参数,这些参数告诉命令你希望它执行的操作。命令参数可以由以下不同元素组成:
-开关(Switches):修改命令的处理方式。开关由一个斜杠后跟一个或多个字符组成,每个Windows命令都有其独特的一组开关。
-修饰符(Modifiers):改变开关的行为。修饰符由一个冒号后跟一个或多个字符组成,每个Windows命令都有自己的一组修饰符。
-参数(Parameters):传递给命令进行处理的参数。

如果你不确定某个命令的语法,可以在Windows命令控制台中输入“Help”,后跟命令名称来查看。例如,输入“HELP DATE”并按回车键,会看到如下信息:

C:\>HELP DATE Displays or sets the date. DATE [/T | date] Type DATE without parameters to display the current date setting and a prompt for a new one. Press ENTER to keep the same date. If Command Extensions are enabled the DATE command supports the /T switch which tells the command to just output the current date, without prompting for a new date. C:\>

下面是CMD命令的语法示例:

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] string]

使用Windows命令时,必须遵循以下格式规则:
- 必须使用空格分隔命令的每个组件。
- 方括号内显示的参数是可选的。
- 方括号内未用斜体显示的参数必须按显示的内容精确输入。
- 斜体参数表示你必须提供的值。
- 方括号内用竖线(|)分隔的参数是互斥的。
- 包含空格的参数必须用一对双引号括起来。

Windows命令不区分大小写,以下命令是等效的:
- ECHO Greetings
- echo Greetings
- Echo Greetings
- EcHo Greetings

3. 启动Windows Shell会话

可以使用CMD和START两个命令来打开Windows shell会话:
-CMD:从Windows运行对话框(点击“开始”,选择“运行”,输入CMD,然后点击“确定”)执行时,CMD会打开一个新的Windows命令控制台。而在已打开的Windows命令控制台中执行时,CMD会在当前控制台内打开一个新的Windows shell会话。
-START:只能在已打开的Windows命令控制台中使用,每次执行时会打开一个新的Windows命令控制台,从而启动一个新的Windows shell会话。

4. 使用CMD命令

CMD命令的语法如下:

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] string]

CMD命令的开关及其功能如下表所示:
| 开关 | 功能 |
| — | — |
| /C | 执行命令并关闭Windows shell |
| /K | 执行命令但不关闭Windows shell |
| /S | 更改/C或/K开关后字符串的处理方式 |
| /Q | 禁用回显 |
| /D | 防止执行注册表中指定的AutoRun命令 |
| /A | 以ANSI格式格式化命令输出 |
| /U | 以Unicode格式格式化命令输出 |
| /T:FG | 设置Windows命令控制台的前景色和背景色 |
| /E:ON | 启用某些命令所需的Windows shell扩展 |
| /E:OFF | 禁用某些命令所需的Windows shell扩展 |
| /F:ON | 启用文件和文件夹名称补全 |
| /F:OFF | 禁用文件和文件夹名称补全 |
| /V:ON | 允许环境变量的延迟扩展 |
| /V:OFF | 防止环境变量的延迟扩展 |

以下是一些使用CMD命令的示例:
- 启动新的Windows shell会话:点击“开始”,选择“运行”,输入CMD,然后点击“确定”。
- 启动新的Windows shell会话并传递命令:点击“开始”,选择“运行”,输入“CMD /K TITLE Welcome”,会打开一个新的命令控制台,其标题栏显示“Welcome”。
- 启动新的Windows shell会话,执行命令后自动关闭:输入“CMD /C DEL C:\Temp*.txt”,会删除C:\Temp目录下的所有文本文件,执行完后命令控制台自动关闭。
- 使用修饰符控制CMD命令的执行:输入“CMD /T:F0”,将Windows颜色方案从黑底白字反转为白底黑字。其中,/T是开关,冒号后面的字符是修饰符,第一个字符设置命令控制台的前景色(如文本颜色),第二个字符设置背景色。Windows命令控制台中可用的前景色和背景色如下表所示:
| 颜色 | 值 |
| — | — |
| 黑色 | 0 |
| 蓝色 | 1 |
| 绿色 | 2 |
| 浅绿色 | 3 |
| 红色 | 4 |
| 紫色 | 5 |
| 黄绿色 | 6 |
| 浅灰色 | 7 |
| 灰色 | 8 |
| 浅蓝色 | 9 |
| 亮绿色 | A |
| 亮浅绿色 | B |
| 亮红色 | C |
| 亮紫色 | D |
| 亮黄色 | E |
| 亮白色 | F |

5. 使用START命令

START命令提供了另一种打开Windows命令控制台并启动新的Windows shell会话的方式。每次执行START命令时,它会自动打开一个新的Windows命令控制台,这为同时打开和使用多个命令控制台提供了便利。START命令还能对新的Windows shell会话提供更多控制。

START命令的语法如下:

START ["TITLE"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/WAIT] [/B] [Program/Command] [Parameters]

START命令的参数及其描述如下表所示:
| 参数 | 描述 |
| — | — |
| “title” | 显示在Windows命令控制台标题栏中的文本 |
| /d Path | 指定启动文件夹 |
| /B | 启动脚本而不打开新的Windows命令控制台 |
| /I | 将执行环境重置为父环境的原始状态 |
| /MIN | 以最小化状态打开新的Windows命令控制台 |
| /MAX | 以最大化状态打开新的Windows命令控制台 |
| /SEPARATE | 在其自己的内存空间中启动一个16位程序 |
| /SHARED | 在共享内存空间中启动一个16位程序 |
| /LOW | 以低优先级启动应用程序 |
| /NORMAL | 以正常优先级启动应用程序 |
| /HIGH | 以高优先级启动应用程序 |
| /REALTIME | 以实时优先级启动应用程序 |
| /ABOVENORMAL | 以高于正常优先级启动应用程序 |
| /BELOWNORMAL | 以低于正常优先级启动应用程序 |
| /WAIT | 启动应用程序并等待其结束 |
| Program/Command | 由Windows shell处理的可选程序或命令 |
| Parameters | 传递给程序或命令的一个或多个参数 |

例如,输入“START /MAX /ABOVENORMAL”,会以最大化状态和高于正常优先级打开一个新的Windows命令控制台。要测试此命令,打开一个Windows命令控制台,在命令提示符处输入该命令,然后按回车键。

6. 内部命令与外部命令

Windows shell使用两种不同类型的命令:内部命令和外部命令。内部命令内置于Windows shell中,而外部命令作为单独的可执行文件存储在计算机硬盘上。大多数Windows命令位于“\Winnt\System32”目录中。内部命令和外部命令都遵循相同的基本语法规则。

Windows shell的内部命令列表如下:
| 命令 | 概述 |
| — | — |
| ASSOC | 显示或修改文件扩展名关联 |
| CALL | 从一个脚本调用另一个脚本,而不停止调用脚本或父脚本。还提供将处理控制切换到脚本中指定标签的功能 |
| CD (CHDIR) | 更改当前目录 |
| CLS | 清除Windows命令控制台屏幕 |
| COLOR | 设置Windows命令控制台的前景色和背景色 |
| COPY | 将一个或多个文件从一个位置复制到另一个位置 |
| DATE | 显示或修改系统日期 |
| DEL | 删除一个或多个文件 |
| DIR | 显示指定目录中的文件和文件夹列表 |
| ECHO | 在Windows命令控制台中显示文本消息 |
| ENDLOCAL | 通过将变量恢复到之前SETLOCAL命令执行前的值,终止变量本地化 |
| ERASE | 删除一个或多个文件 |
| EXIT | 关闭Windows命令控制台并结束命令shell会话 |
| FOR | 对文件集合中的每个文件执行命令 |
| FTYPE | 显示和修改与文件扩展名关联的文件类型 |
| GOTO | 通过将处理流程转移到包含指定标签的行来改变脚本中的处理流程 |
| IF | 执行条件处理,并根据测试结果改变脚本内的执行流程 |
| MD (MKDIR) | 创建新的目录或子目录 |
| MOVE | 将一个或多个文件从一个位置移动到另一个位置 |
| PATH | 配置Windows用于定位可执行文件的搜索路径 |
| PAUSE | 暂停脚本执行,直到用户按下某个键 |
| POPD | 将当前文件夹更改为相应PUSHD命令存储的文件夹 |
| PROMPT | 更改Windows命令提示符的显示 |
| PUSHD | 更改到指定文件夹,并存储上一个文件夹,供后续POPD命令引用 |
| RD (RMDIR) | 删除指定文件夹 |
| REM | 为脚本添加注释 |
| REN (RENAME) | 重命名文件或文件夹 |
| SET | 创建、修改和删除变量 |
| SETLOCAL | 记录Windows shell中环境变量的当前值,以便后续通过ENDLOCAL命令恢复 |
| SHIFT | 改变脚本参数的位置 |
| START | 启动新的Windows shell会话并执行指定命令 |
| TIME | 显示和修改系统时间 |
| TITLE | 修改Windows命令控制台标题栏中显示的文本 |
| TYPE | 在Windows命令控制台中显示文本文件的内容 |
| VER | 显示Windows版本号 |

外部命令和命令行实用程序数量众多且种类繁多,它们包括操作系统提供的任何可执行文件以及你安装在计算机上的任何应用程序。

7. Windows如何定位命令

为了高效使用Windows shell,了解它如何定位你要执行的命令很有帮助。Windows shell尝试执行你指定的命令时,会按以下步骤进行:

graph TD; A[提供命令完整路径名] --> B{命令是否存在}; B -- 是 --> C[执行命令]; B -- 否 --> D[生成错误]; E[仅指定命令名] --> F{是否为内部命令}; F -- 是 --> C; F -- 否 --> G{当前工作目录中是否存在}; G -- 是 --> C; G -- 否 --> H{路径变量指定的文件夹中是否存在}; H -- 是 --> C; H -- 否 --> D;
  1. 如果你提供了命令的完整路径名,Windows shell会在指定文件夹中查找并执行该命令。如果未找到命令,则会生成错误。
  2. 如果你只指定了命令名而不包含路径,Windows shell首先会检查该命令是否为内部命令,如果是,则执行该命令。
  3. 接着,Windows shell会在当前工作目录中查找该命令,如果找到则执行。
  4. 如果此时仍未找到命令,Windows shell会开始按顺序遍历路径变量中指定的每个文件夹。如果找到匹配的命令,则执行该命令并停止搜索;如果未找到,则生成错误。

8. 使用PATH命令

Windows将命令位置信息存储在一个名为“path”的变量中。该变量存储了Windows shell在查找外部Windows命令时会搜索的文件夹列表。可以使用PATH命令查看和修改该变量的内容,其语法如下:

PATH [[drive:]path[;...]] [%path%]

要查看path变量中存储的文件夹列表,打开Windows命令提示符,输入“PATH”,输出类似于:

C:\>path PATH=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM C:\>

此示例中的输出表明,Windows shell在查找要执行的命令时会搜索三个文件夹,搜索顺序从左到右。因此,会先搜索“C:\Winnnt\system32”,如果未找到命令,再搜索“C:\Winnt”,最后搜索“C:\Winnt\system32\wbem”。

如果你想将额外的文件夹添加到path变量的搜索列表中,可以这样做:
-添加到搜索列表开头:输入“PATH C:\scripts;%path%”,将“C:\Scripts”文件夹添加到搜索列表开头。将文件夹放在path变量搜索列表的开头,可确保它是第一个被检查的文件夹。这样,如果你的脚本名称恰好与某个Windows命令匹配,你的脚本将优先执行。因为Windows shell一旦找到第一个匹配项,就会停止搜索命令。
-添加到搜索列表末尾:同样输入“PATH C:\scripts;%path%”,可将文件夹添加到搜索列表末尾。

修改PATH命令的搜索路径时,别忘了始终将“%path%”变量添加到PATH命令的开头或结尾。否则,原始搜索路径中的文件夹列表将被删除并替换为你的新添加项,这可能不是你想要的结果。

通过Windows shell脚本修改path变量所做的任何更改都是临时的。也就是说,关闭Windows命令控制台并终止Windows shell会话后,所做的更改将丢失。

9. PATHEXT变量

输入外部命令时,必须指定其名称,也可以选择指定外部命令的文件扩展名。通常,你只需要命令本身的名称即可。当你输入命令名称而不包含文件扩展名时,Windows shell会使用“pathext”变量中存储的文件扩展名列表来搜索匹配的命令。“pathext”变量列出了Windows关联为可执行文件的所有文件扩展名。

当你输入一个不带文件扩展名的命令时,Windows shell会使用“pathext”中存储的文件扩展名集合来搜索匹配的文件。它通过将“pathext”中列出的每个文件扩展名依次替换为命令的文件扩展名,直到找到匹配项为止。找到的第一个匹配项将结束搜索,然后Windows shell会执行该命令。

默认情况下,“pathext”变量按以下顺序列出以下文件扩展名:
- .COM
- .EXE
- .BAT
- .CMD

要显示“pathext”变量的内容,在Windows命令提示符处输入“ECHO %pathext%”,输出类似于:

C:\>ECHO %pathext% .COM;.EXE;.BAT;.CMD

不过,根据你安装的软件不同,可能会看到其他文件扩展名。如果你想向“pathext”添加新的文件扩展名,可以使用“SET”命令,例如:

SET pathext=%pathext%;.shl

此示例将文件扩展名“.SHL”添加到“pathext”变量的末尾。在处理变量时,你会经常使用“SET”命令。

10. 命令执行流程总结

为了更清晰地理解Windows shell执行命令的整个过程,我们可以将前面提到的步骤总结成一个更详细的流程图:

graph LR classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px A([开始输入命令]):::startend --> B{是否提供完整路径名?}:::decision B -- 是 --> C{指定文件夹中命令是否存在?}:::decision C -- 是 --> D(执行命令):::process C -- 否 --> E(生成错误):::process B -- 否 --> F{命令是否为内部命令?}:::decision F -- 是 --> D F -- 否 --> G{当前工作目录中命令是否存在?}:::decision G -- 是 --> D G -- 否 --> H(遍历path变量指定文件夹):::process H --> I{是否找到匹配命令?}:::decision I -- 是 --> D I -- 否 --> E D --> J([结束命令执行]):::startend E --> J

这个流程图展示了从输入命令到最终执行或报错的完整过程。首先判断是否提供了完整路径名,如果是则在指定文件夹查找;若不是则先检查是否为内部命令,接着在当前工作目录查找,最后遍历path变量指定的文件夹。

11. 命令使用的注意事项

11.1 命令大小写问题

虽然Windows命令不区分大小写,但在编写脚本时,为了保持代码的一致性和可读性,建议统一使用一种大小写风格。例如,全部使用大写或全部使用小写。以下是一些示例:

# 全部大写 ECHO "This is a test." # 全部小写 echo "This is a test."

11.2 互斥参数的使用

在使用命令时,要特别注意互斥参数的问题。例如,在使用CMD命令时,/C/K是互斥的,不能同时使用。以下是错误和正确的使用示例:

# 错误示例:同时使用 /C 和 /K CMD /C /K DIR # 正确示例:分别使用 /C 和 /K CMD /C DIR CMD /K DIR

11.3 变量引用问题

在脚本中引用变量时,必须用一对百分号将变量名括起来,如%path%%pathext%。同时,在修改path变量时,要确保正确添加原有的变量值,避免覆盖原有的搜索路径。以下是正确和错误的修改path变量示例:

# 正确示例:添加新路径到 path 变量开头 PATH C:\newscripts;%path% # 错误示例:未添加 %path%,会覆盖原有路径 PATH C:\newscripts

12. 命令组合使用示例

12.1 使用CMDSTART组合打开多个控制台并执行命令

# 使用 CMD 打开一个新控制台并设置标题,执行 DIR 命令后关闭 CMD /C TITLE "Directory Listing" && DIR # 使用 START 打开一个新控制台,以最大化状态和高于正常优先级运行,执行 DATE 命令 START /MAX /ABOVENORMAL "Date Check" DATE

12.2 结合内部命令进行文件操作

# 创建一个新目录 MD C:\NewFolder # 复制文件到新目录 COPY C:\OldFile.txt C:\NewFolder # 显示新目录中的文件列表 DIR C:\NewFolder

13. 总结

通过以上内容,我们全面了解了Windows Shell脚本编程的基础知识。从项目预览中,我们看到了脚本如何随机改变命令控制台的外观,展示了脚本编程的趣味性和实用性。在命令语法方面,我们掌握了命令的通用格式、参数的组成以及使用规则,这是编写脚本的基础。

启动会话和使用CMDSTART命令让我们能够灵活地打开和管理Windows shell会话。内部命令和外部命令的区分以及Windows定位命令的方式,帮助我们理解命令执行的原理。PATH命令和PATHEXT变量的使用,让我们可以自定义命令的搜索路径和可执行文件的扩展名,提高脚本的灵活性。

在实际应用中,要注意命令使用的细节,如大小写、互斥参数和变量引用等问题。同时,通过命令的组合使用,我们可以实现更复杂的任务,提高工作效率。希望这些知识能够帮助你在Windows Shell脚本编程的道路上迈出坚实的一步。

以下是一个总结表格,列出了关键命令及其功能:
| 命令 | 功能 |
| — | — |
| CMD | 启动新的Windows shell会话,可传递命令并控制会话关闭 |
| START | 打开新的Windows命令控制台,可设置多种启动参数 |
| PATH | 查看和修改命令搜索路径 |
| SET | 创建、修改和删除变量,如修改pathext变量 |
| 内部命令(如ASSOC、CD等) | 执行各种系统操作,如文件关联、目录切换等 |
| 外部命令 | 执行操作系统或应用程序提供的可执行文件 |

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询