ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Take Command 脚本语言基础

2021-04-18 10:07:29  阅读:244  来源: 互联网

标签:DO 脚本语言 CMD 别名 命令 TCL Command Take 变量


Take Command Language(以下简称为TCL)是一种命令语言。它良好的兼容了原生批处理语法,可构建简单或高度复杂的批处理程序。该语言也可以在终端1上交互使用,以实现非常强大的实时计算机操作。其终端运行时2(所有TCL运行时下文均以“运行环境”代称) Take Command Console (以下简称为TCC)3甚至可以完美替换CMD。

概述

TCL 有很多要素。可分为三类:

  • 内部命令:TCL主要的构成。常见命令如DIR、COPY、MOVE等。TCL 可让您即时访问超 235 个内部命令(CMD的内部命令少于 40 个)。
    内部命令,指的是该命令内置在运行环境中。对于 CMD 来说,某些命令(如 XCOPY)实际上是单独的程序(可在%windir%\system32中找到XCOPY.EXE)。
  • 内部变量:内部变量是运行环境中内置的特殊变量,用于提供有关系统的信息。它们不存储在系统环境变量中,但可以像环境变量一样在交互式命令、别名和批处理中进行访问。Take Command 提供了 270 多个内部变量,可以给您提供有关计算机及其运行的大量信息。包括已安装的硬件、硬件状态、操作系统信息和软件状态等。
  • 变量函数:变量函数与内部变量非常相似,但它们需要传入一个或多个参数(可以是环境变量,甚至是其他变量函数)。变量函数可实现检查可用的系统资源、操作字符串和数字、处理文件和文件名等功能。运行环境中内置了 360 多个变量函数。

在本教程中,我们不会讨论 TCL 的所有功能(手册有 1300 页!)。我们将假设您了解 CMD 的基础知识,并指出 TCC 在工作中比 CMD 做得更好的一些事情。

内部命令

TCL 的内部命令有几个方面绝对值得一看:

  • 开关
  • 别名
  • HTTP 和 FTP
  • 流程控制命令
  • KeyStack 命令
  • 事件监视命令(触发器) —— 有单独的教程

下面将介绍每一项的内容:

1. 开关

开关可以修改命令的功能。TCC的开关是CMD的超集,通常与其兼容。只能说通常,因为CMD的每个版本都不大一致。
例如,在 CMD 中,COPY 命令有 7 个开关(XCOPY 有更多)。TCL 的 COPY 命令有 34 个开关。其中 CMD 的 COPY 命令没有的一些开关如下:

  • /N 显示你如果执行这个命令的时候的输出,不会真的执行命令。
  • /O 仅在目标不存在时复制源文件。
  • /S 复制子目录树。
  • /H 复制所有匹配的文件,包括具有隐藏属性或系统属性的文件。
  • /W 删除源目录中有但目标目录没有的文件。(就是比源目录多出来的文件,其实就是同步)

用 TCL ,只需打两三个字符即可执行非常强大的操作。

2. 别名

新增的开关是很强大,但有时候,你会连这两三个字符都懒得输。
你希望 TCL 可以适配你常用的一些命令。
我们有一个解决方案——别名。TCL 的很多功能都通过别名结合在一起,这为您提供了创建自己的命令的能力。别名就是为命令或命令组起的新名字。
简单的别名将新名字替换为现有的命令。更复杂的别名可以重新定义内部或外部命令的默认设置、在内存中以非常快的速度运行批处理文件、基于其他命令的结果执行命令。TCC 还支持目录别名,可以方便指定路径的记忆。
别名可以自定义新命令。例如,DIR 命令可以以多种方式对目录进行排序。您可以创建一个名为 DE 的别名,功能是"按文件名和扩展名对目录进行排序,并在显示目录时在每个页面后暂停":
alias de=dir /oe /p
因此,您实际上不必记住所有开关。您可以自定义满足自身需求的 TCL 语言。例如,您可以创建与常见 Linux shell 命令匹配的别名,想要更舒适的话,还可以让其有相同的语法。
TCL 别名在几个关键方面与 CMD(及其外部命令 DOSKEY)不同。

  • 您可以在批处理文件中使用别名。但 DOSKEY 定义的宏不能在批处理文件中使用。
  • TCL 别名支持处理变量扩展,DOSKEY 搞不了这个。下面的例子创建了一个简单的命令行计算器。
    alias calc=`echo The answer is: %@eval[%$]`
    执行例子后,可以键入 CALC 3/7,你就能看到答案。变量函数 %@eval[%$]将由解析器解析执行。$占位符会被文本3/7替换,计算表达式的变量函数@eval将计算结果。
  • 在 TCC 中,您可以将常用别名分配给击键。如:
    alias @Shift-F5=*dir /2/p
    执行例子后,每当您按下 Shift-F5 并回车,都会看到一个包含分页的双列目录。
  • TCL 还允许目录别名,可以方便指定路径的记忆。例如,如果定义别名:
    alias pf:=c:\program files
    之后,您可以通过输入pf:\jpsoft来引用c:\program files\jpsoft中的文件。

3. 流程控制命令

CMD 最弱的部分之一就是流程控制。这些 IF…THEN…ELSE 、 DO 循环的结构,允许您开发复杂的批处理程序。如果要创建数据处理的批处理程序,CMD 中的各种限制会阻碍您程序的编写。
TCL 提供了一组非常丰富的流程控制结构,允许您实现(甚至超越)典型 Linux Shell 的功能。
以下示例显示了您可以创建的 DO 循环的一些类型:
注:方括号中的内容是可选的。

Do Loops

循环指定次数:DO 次数
死循环:DO FOREVER
循环并迭代:DO 变量名 = 起始值 TO 终之值 [BY 步长]
条件成立时循环:DO WHILE 条件
条件不成立时循环:DO UNTIL 条件
循环到指定时刻:DO UNTIL DATETIME 日期 时间
循环指定时长:DO FOR 数 [SECONDS | MINUTES | HOURS]
循环并迭代字符串集中的每个字符:DO 变量名 IN /C 字符串集
循环并迭代命令的返回值:DO varname in /P 命令
循环并迭代文本文件的每一行:DO varname IN @file
DO varname IN [range...] [/I:"text" /S[n] /A:[-|+]hsad] fileset
DO varname IN [/T"delimiters"] /L stringset

TCL 也提供了一个非常给力的 IF…THEN…ELSE 结构。可通过 IFF 命令构造。

IF…THEN…ELSE

IFF 条件1 THEN
    命令集1
[ELSEIFF 条件2 THEN 命令集2 ]
...
[ELSE 命令集3 ]
ENDIFF

下面例子中的别名将检查参数是否为子目录。若是,则将删除该目录(包括其中的文件):
alias prune `iff isdir %1 then & del /s /x /z %1 & else & echo %1 is not a directory! & endiff`
下面的例子展示 SWITCH 结构的工作规则。如果用户按 A,则下面的批处理文件片段将显示一条消息;如果用户按 B 或 C,则显示另一条消息;如果用户按任何其他键,则显示第三条消息。

Switch 结构

inkey 输入一个字符: %%key
switch %key
case A
   echo 是A
case B .or. C
   echo 是B或C
default
   echo 不是A、B、C
endswitch

KEYSTACK

KEYSTACK 可进行按键模拟,并将它们发送至程序或命令,就像在键盘上键入一样。
KEYSTACK 通常用于从批处理文件启动的程序。例如,若要启动 Word 并打开您使用的最后一个文档,可以使用以下命令:
start word & keystack /w54 alt-f "1"
这会导致以下情况:

  • word 被打开,
  • /w 开关会产生约 3 秒的延迟(每个时钟刻度约 1/18 秒),
  • 将 alt-F(文件下拉菜单)和 1(打开最近使用的文件)的击键放入缓冲区。

Word 会接收这些击键并执行相应的操作。请注意,两个命令"START"和"KEYSTACK"是在单行上发出的。这可确保击键发送到 Word 的窗口。

5. FTP 和 HTTP

TCL 的 FTP 和 HTTP 命令允许您将 http 和 ftp 站点视为本地磁盘驱动器。相比CMD,这是一个巨大的优势。在互联网世界中,我们向您展示如何使用这些命令创建实用的远程监视应用程序。
在最简单的情形中,您可以把 FTP 或 HTTP 站点当作本地磁盘。例如,要获取 JPSoftware FTP 站点的目录,可以使用以下命令:
dir ftp://ftp.jpsoft.com/*
下面的例子演示 ftp 用户名和密码如何包含到命令中:
dir ftp://用户名:密码@ftp.abc.com/mydir/*
互联网站点也可使用 DIR,COPY,MOVE,DEL 等命令。这些命令也支持与 FTP 和 HTTP 的安全版本一起使用。

6. 事件监视命令(触发器)

事件监视命令是 TCL 中最强大的功能之一。它们允许您在计算机上监视各种活动,并"触发"流程以采取行动或报告问题。
这块内容有单独的教程。

内部变量

内部变量是运行环境中内置的特殊变量,用于提供有关系统的信息。它们不存储在系统环境变量中,但可以像在交互式命令、别名和批处理文件中的环境变量一样进行访问。
内部变量的数目超过 280 个(CMD 连 10 个都没有)。变量的主要类型包括:

  • 硬件状态
  • 操作系统和软件状态
  • 日期和时间
  • 驱动器和目录
  • 错误代码
  • 屏幕、颜色和光标
  • TC状态
  • 兼容性

下面是如何使用称为“_DOW”的变量(返回今天是星期几)的简单例子:
if "%_DOW" == "Mon" call c:\cleanup\weekly.bat
如果今天是星期一,此示例调用另一个批处理文件。
一个补充说明:
%符号有什么用?当您在变量或函数前面看到%符号时,这意味着解析器应计算函数,并将其文本值替换变量或函数。因此,在上一个示例中,_DOW将替换为结果,在这种情况下,结果将会是 MON、TUE 、等等。

DO FOREVER
    iff %_BATTERYPERCENT LT 25 MSGBOX 没电了
ENDDO

此命令将循环检查电池状态,并在电池电量不足时弹出一个消息框。MSGBOX 实际上是 TCC 中非常强大的命令。具体可在帮助文件中查看。
下面是一个示例,用于在运行应用程序之前检查是否有足够的可用资源。

iff %_GDIFREE lt 40 then
    echo GDI资源不足!
    quit
else
    d:\mydir\myapp
endiff

变量函数

变量函数是 TCC 最强大的功能之一。变量函数与内部变量非常相似,但它们需要一个或多个参数(可以是环境变量,甚至是其他变量函数)。
可变函数很有用,可用于检查可用的系统资源、操作字符串和数字以及处理文件和文件名。
内置的 360 多个变量函数被分为 13 个类别。它们允许您以非常强大的方式收集和操作系统信息。(CMD 没有变量函数)

  • 二进制缓冲区
  • 日期和时间
  • 驱动器和设备
  • 文件内容
  • 文件名
  • 文件属性
  • 输入对话框
  • 监测
  • 网络相关属性
  • 数字和算术
  • 字符串和字符
  • 系统状态
  • 实用函数

使用函数,TCC 可以读取和写入文本文件,以及一些特殊文件,如 Windows 注册表或 .ini 文件。


  1. 终端(程序):用户输入数据,显示其计算/运行结果的程序。 ↩︎

  2. 运行时:一个程序运行所需的依赖。即俗称的“环境”。 ↩︎

  3. TCL的各种运行时、IDE对比详见“Take Command 相关软件对比”。 ↩︎

标签:DO,脚本语言,CMD,别名,命令,TCL,Command,Take,变量
来源: https://blog.51cto.com/oldliu/2714812

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有