Take Command Language(以下简称为TCL)是一种命令语言。它良好的兼容了原生批处理语法,可构建简单或高度复杂的批处理程序。该语言也可以在终端[1]上交互使用,以实现非常强大的实时计算机操作。其终端运行时[2](所有TCL运行时下文均以“运行环境”代称) Take Command Console (以下简称为TCC)[3]甚至可以完美替换CMD。
TCL 有很多要素。可分为三类:
在本教程中,我们不会讨论 TCL 的所有功能(手册有 1300 页!)。我们将假设您了解 CMD 的基础知识,并指出 TCC 在工作中比 CMD 做得更好的一些事情。
TCL 的内部命令有几个方面绝对值得一看:
下面将介绍每一项的内容:
开关可以修改命令的功能。TCC的开关是CMD的超集,通常与其兼容。只能说通常,因为CMD的每个版本都不大一致。
例如,在 CMD 中,COPY 命令有 7 个开关(XCOPY 有更多)。TCL 的 COPY 命令有 34 个开关。其中 CMD 的 COPY 命令没有的一些开关如下:
用 TCL ,只需打两三个字符即可执行非常强大的操作。
新增的开关是很强大,但有时候,你会连这两三个字符都懒得输。
你希望 TCL 可以适配你常用的一些命令。
我们有一个解决方案——别名。TCL 的很多功能都通过别名结合在一起,这为您提供了创建自己的命令的能力。别名就是为命令或命令组起的新名字。
简单的别名将新名字替换为现有的命令。更复杂的别名可以重新定义内部或外部命令的默认设置、在内存中以非常快的速度运行批处理文件、基于其他命令的结果执行命令。TCC 还支持目录别名,可以方便指定路径的记忆。
别名可以自定义新命令。例如,DIR 命令可以以多种方式对目录进行排序。您可以创建一个名为 DE 的别名,功能是"按文件名和扩展名对目录进行排序,并在显示目录时在每个页面后暂停":
alias de=dir /oe /p
因此,您实际上不必记住所有开关。您可以自定义满足自身需求的 TCL 语言。例如,您可以创建与常见 Linux shell 命令匹配的别名,想要更舒适的话,还可以让其有相同的语法。
TCL 别名在几个关键方面与 CMD(及其外部命令 DOSKEY)不同。
alias calc=`echo The answer is: %@eval[%$]`
CALC 3/7
,你就能看到答案。变量函数 %@eval[%$]
将由解析器解析执行。$
占位符会被文本3/7
替换,计算表达式的变量函数@eval
将计算结果。alias @Shift-F5=*dir /2/p
alias pf:=c:\program files
pf:\jpsoft
来引用c:\program files\jpsoft
中的文件。CMD 最弱的部分之一就是流程控制。这些 IF..THEN..ELSE 、 DO 循环的结构,允许您开发复杂的批处理程序。如果要创建数据处理的批处理程序,CMD 中的各种限制会阻碍您程序的编写。
TCL 提供了一组非常丰富的流程控制结构,允许您实现(甚至超越)典型 Linux Shell 的功能。
以下示例显示了您可以创建的 DO 循环的一些类型:
注:方括号中的内容是可选的。
循环指定次数: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 命令构造。
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,则显示另一条消息;如果用户按任何其他键,则显示第三条消息。
inkey 输入一个字符: %%key
switch %key
case A
echo 是A
case B .or. C
echo 是B或C
default
echo 不是A、B、C
endswitch
KEYSTACK 可进行按键模拟,并将它们发送至程序或命令,就像在键盘上键入一样。
KEYSTACK 通常用于从批处理文件启动的程序。例如,若要启动 Word 并打开您使用的最后一个文档,可以使用以下命令:
start word & keystack /w54 alt-f "1"
这会导致以下情况:
Word 会接收这些击键并执行相应的操作。请注意,两个命令"START"和"KEYSTACK"是在单行上发出的。这可确保击键发送到 Word 的窗口。
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 的安全版本一起使用。
事件监视命令是 TCL 中最强大的功能之一。它们允许您在计算机上监视各种活动,并"触发"流程以采取行动或报告问题。
这块内容有单独的教程。
内部变量是运行环境中内置的特殊变量,用于提供有关系统的信息。它们不存储在系统环境变量中,但可以像在交互式命令、别名和批处理文件中的环境变量一样进行访问。
内部变量的数目超过 280 个(CMD 连 10 个都没有)。变量的主要类型包括:
下面是如何使用称为“_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 文件。
原文:https://www.cnblogs.com/OldLiu/p/14672849.html