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

指南:

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

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

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


当前回答

FOR命令!虽然我讨厌写批处理文件,但我很感激它。

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

将解析myfile.txt中的每一行,忽略以分号开头的行,将每行的第2和第3个标记传递给for主体,标记由逗号和/或空格分隔。 注意for语句引用%i获取第二个令牌,引用%j获取第三个令牌,引用%k获取第三个令牌之后的所有剩余令牌。

你也可以用它来遍历目录、目录内容等等…

其他回答

PUSHD path

将您带到path指定的目录。

POPD

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

这里有一个技巧,我用它来连续运行My Nant Build脚本,而不必一遍又一遍地单击批处理文件。

:CODELINE
NANT.EXE -buildfile:alltargets.build -l:build.log build.product
@pause
GOTO :CODELINE

在您的解决方案完成构建之后,它将被暂停。然后,如果您按下任何键,它将再次重新运行构建脚本。我必须说非常方便。

在脚本中使用命令扩展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将不会恢复它们。

而不是用REM或::行乱写脚本,我在每个脚本的顶部执行以下操作:

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

注意如何使用管道和重定向字符而不转义它们。

具有数值变量的循环的正确格式是

for /l %%i in (startNumber, counter, endNumber) do echo %%i

更多详情> http://www.ss64.com/nt/for.html