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

指南:

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

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

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


当前回答

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

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

其他回答

为了从脚本内部解析stdin,你需要使用For和FIND命令:

for /f "tokens=*" %%g in ('find /V ""') do (
     :: do what you want with %%g
     echo %%g
)

您可以在批处理文件运行时修改它。例如,如果您希望在批处理文件退出之前看到结果,您可以在文件运行时在文件的末尾添加一个被遗忘的暂停。

请参见在批处理文件运行时更改批处理文件

我个人认为这更像是一个陷阱,而不是一个功能。

PUSHD path

将您带到path指定的目录。

POPD

带您回到您“推”的目录。

整数运算:

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

这里将介绍如何通过扫描给定目录来构建CLASSPATH。

setlocal ENABLEDELAYEDEXPANSION
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.)
FOR /R .\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
Echo The Classpath definition is %CLASSPATH%

适用于XP(或更好)。对于W2K,您需要使用两个BAT文件来实现相同的结果(请参阅在类路径定义中包含所有jar)。

在1.6版本中不需要它,因为你可以直接在CLASSPATH中指定通配符(例如-cp ".\lib*")。