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

指南:

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

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

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


当前回答

通过使用CALL, EXIT /B, SETLOCAL和ENDLOCAL可以实现带有局部变量的子例程。

例子:

@echo off

set x=xxxxx
call :sub 10
echo %x%
exit /b

:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b

这将打印

11
xxxxx

尽管:sub修改了x。

其他回答

一行中包含多个命令,在很多情况下都很有用:

&用于组合两个命令,执行command1和command2 &&一个条件组合,如果command1成功完成,则执行command2 仅当command1未成功完成时才执行Command2。

例子:

:: ** Edit the most recent .TXT file and exit, useful in a .CMD / .BAT **
FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT


:: ** If exist any .TXT file, display the list in NOTEPAD, if not it 
:: ** exits without any error (note the && and the 2> error redirection)
DIR *.TXT > TXT.LST 2> NUL && NOTEPAD TXT.LST

将输出重定向到控制台,即使批处理的输出已经通过> con语法重定向到文件。

例子: foo.cmd:

echo a
echo b > con

调用:

foo.cmd > output.txt

这将导致“a”输出到output.txt,而“b”输出到控制台。

IF命令!没有它,我的批处理文件是垃圾!

@echo off
IF exist %windir%\system32\iexplore.exe goto end

echo Hmm... it seems you do not have Internet Explorer.
echo Great! You seem to understand ;)

:end
echo Hmm... You have Internet Explorer.
echo That is bad :)

将错误级别设置为你想要的任何数字的方法:

CMD /C EXIT number

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

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

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