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

指南:

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

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

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


当前回答

使用SET /P从文件中设置环境变量

SET /P SVNVERSION=<ver.tmp

其他回答

我总是发现很难阅读每行用关键字标记的注释:

REM blah blah blah

易于阅读:

:: blah blah blah

这里将介绍如何通过扫描给定目录来构建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*")。

在脚本中使用命令扩展shell选项时,强烈建议您在脚本开始时执行以下技巧。

——从http://www.ss64.com/nt/setlocal.html粘贴的信息

如果给定一个参数,SETLOCAL将设置一个ERRORLEVEL。如果给出两个有效参数中的一个,它将为0,否则为1。 你可以在批处理文件中使用它来确定命令扩展名是否可用,使用以下技术:

VERIFY errors 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Unable to enable extensions

这是因为“VERIFY errors”将ERRORLEVEL设置为1,然后如果扩展不可用(例如,如果脚本在command.com下运行),SETLOCAL将无法重置ERRORLEVEL值。 如果命令扩展被永久禁用,那么SETLOCAL ENABLEEXTENSIONS将不会恢复它们。

输出一个空行:

echo.

继续行:

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf