Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?

指南:

每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包

澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。

(请参见:Windows批处理文件:.bat vs .cmd?)


当前回答

设置环境变量时的搜索和替换:

> @set fname=%date:/=%

...从日期中删除“/”以用于带时间戳的文件名。

还有子字符串……

> @set dayofweek=%fname:~0,3%

其他回答

稍后可以使用call对名称求值,从而得到一些有用的属性。

call set SomeEnvVariable_%extension%=%%%somevalue%%%

使用调用来设置名称依赖于其他变量的变量。如果与某些变量命名规则一起使用,则可以通过使用谨慎的命名规则来模拟数组或字典等数据集合。somevalue周围的三个%是这样的,它将在调用之后和调用set之前计算为一个变量名,周围是一个%。这意味着一行中的两个%转义为一个%字符,然后它将再次展开它,因此somevalue实际上是一个名称指针。

call set TempVar=%%SomeEnvVariable_%extension%%%

将它与一个临时变量一起使用以检索值,然后可以在逻辑中使用该值。这在与延迟变量展开一起使用时非常有用。

要正确使用此方法,需要启用延迟变量扩展。因为它在默认情况下是关闭的,所以最好在脚本中启用它,将其作为第一个指令之一:

setlocal EnableDelayedExpansion

整数运算:

> SET /A result=10/3 + 1
4

设置环境变量时的搜索和替换:

> @set fname=%date:/=%

...从日期中删除“/”以用于带时间戳的文件名。

还有子字符串……

> @set dayofweek=%fname:~0,3%

不知道这在批处理文件中有多有用,但在命令提示符中使用它是一个非常方便的命令:

C:\some_directory> start .

这将在“some_directory”文件夹中打开Windows资源管理器。

我发现这非常节省时间。

现在很多人使用GOTO:EOF来终止他们的批处理文件,但你也可以使用EXIT /B来达到这个目的。

使用EXIT /B的优点是你可以在EXIT /B之后添加一个错误级别,它将退出该错误级别。