由于经常会碰到批处理文件,因此尝试去学习了下批处理编程。
原文见这里,Guide to Windows Batch Scripting
::关闭回显
@echo off
::setlocal保证变量是局部而不会覆盖全局
setlocal enableextensions
::该批处理文件名,不包括后缀
SET me=%~n0
::所在目录的绝对路径
SET parent=%~dp0
::去掉参数(参数包括批处理文件名,为第0个参数)的引号
set myvar=%~1
::给参数去引号并加上绝对路径
set myvar=%~f0
::所在目录的绝对路径
set myvar=%~dp1
::该批处理文件名,包括后缀
set myvar=%~nx0
echo %myvar%
::/A开关表示等号右侧为一个数学表达式
set /A myvar=1+2
::使用errorlevel变量检查上个命令的执行情况
somefile.exe
if %errorlevel% equ 9009 (
echo error - somefile.exe not found in your path
)
::条件执行,如果前面的命令执行成功则执行后者
somefile.exe && echo somefile.exe succeeded!
::失败则执行后者
SomeCommand.exe || ECHO SomeCommand.exe failed with return code %ERRORLEVEL%
::执行失败则退出,/B开关表示仅仅退出当前script的执行环境而不是命令提示程序
SomeCommand.exe || EXIT /B 1
::同上,:EOF是一个内置label
SomeCommand.exe || GOTO :EOF
::命令的错误码应该定义为2的幂,便于一个返回的错误码标示多个问题
SET /A errno=0
SET /A ERROR_HELP_SCREEN=1
SET /A ERROR_SOMECOMMAND_NOT_FOUND=2
SET /A ERROR_OTHERCOMMAND_FAILED=4
::变量可以使用^|=进行位或(bitwise or)
SomeCommand.exe
IF %ERRORLEVEL% NEQ 0 SET /A errno^|=%ERROR_SOMECOMMAND_NOT_FOUND%
OtherCommand.exe
IF %ERRORLEVEL% NEQ 0 (
SET /A errno^|=%ERROR_OTHERCOMMAND_FAILED%
)
EXIT /B %errno%