Windows下Bat批处理

前段时间为了省去每次都需要用vs打开工程去编译每个工程的时间,写了批处理脚本,批量编译所有工程,以下附上工作过程中用到的比较有用的内容链接:

什么是批处理?(来自百度百科)

批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行

批处理是一种简化的脚本语言,也称作宏。它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等中高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe运行该批处理程序。一般情况下,每条命令占据一行;当然也可以将多条命令用特定符号(如:&;、&&;、|、||等)分隔后写入同一行中;还有的情况就是像if、for等较高级的命令则要占据几行、几十甚至几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。

示例代码:

以下这段代码是一个输出“hello world”的批处理代码:
@echo off
echo hello world
pause & exit
以下这段代码可以把用户输入的字符赋值到"input"变量里,并输出:
@echo off
set /p "input=>"
echo 您输入的是%input%
pause

以下为比较有用的内容,转自不同的地方: 

  1. 批处理命令
    https://blog.csdn.net/Miss_kun/article/details/51595208?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158620672519725247631207%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158620672519725247631207&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-all_SOOPENSEARCH-9
  2. 批处理命令——echo 和 @
    https://www.cnblogs.com/Braveliu/p/5061745.html
  3. DOS 批处理命令For循环命令详解
    https://www.jb51.net/article/93171.htm
  4. 批处理for与变量延迟详解(重点)
    https://wenku.baidu.com/view/c48fe942336c1eb91a375df9.html
  5. DOS批处理笔记
    https://www.yht7.com/news/31597
  6. 通过批处理脚本命令行编译VS工程  命令行编译通用模板
    https://blog.csdn.net/SoaringLee_fighting/article/details/78046263?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
  7. 利用批处理结合Msbuild实现快速编译
    https://www.cnblogs.com/fang-beny/archive/2013/04/20/3032114.html
  8. bat find 命令
    https://blog.csdn.net/mezheng/article/details/7948710
  9. bat中的color的参数
    https://zhidao.baidu.com/question/535219291.html

下面为本人写的bat文件(出于隐私, BUILD_SLN_PATH均为虚拟的,根据自己的工程路径修改即可;BUILD_log为编译的log日志,编译时的信息)

@echo   off

rem 如果你的工作目录不在N盘 或者 Vs2015 不在C盘只需修改下面三行
set VIPS_PATH="F:\Lx"
cd /d %VIPS_PATH%
set VS2015PATH="D:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\Common7\IDE\"
if not exist "%VS2015PATH%\DEVENV.EXE" goto EnvError
@SET DEVENV="%VS2015PATH%\DEVENV.EXE"

setlocal enabledelayedexpansion

rem ======================for begin=====================
set /a bProcess=1
for /l %%i in (1,1,3) do (

rem =================1 Lx1=====================
if %%i EQU 1 (
set BUILD_TYPE= "Debug|x64"
set BUILD_log= ".\buildlog\Build_Lx1.log"

set BUILD_PROJECT=Lx1
set BUILD_SLN=Lx1.sln
set BUILD_SLN_PATH=.\Lx1\!BUILD_SLN!
)

rem =================2 Lx2=====================
if %%i EQU 2 (
set BUILD_TYPE= "Debug|x64"
set BUILD_log= ".\buildlog\Build_Lx2.log"

set BUILD_PROJECT=Lx2
set BUILD_SLN=Lx2.sln
set BUILD_SLN_PATH=.\Lx2\!BUILD_SLN!
)

rem =================3 Lx3=====================
if %%i EQU 3 (
set BUILD_TYPE= "Debug|x64"
set BUILD_log= ".\buildlog\Build_Lx3.log"

set BUILD_PROJECT=Lx3
set BUILD_SLN=Lx3.sln
set BUILD_SLN_PATH=.\Lx3\!BUILD_SLN!
)


rem =================编译=====================
if !bProcess! EQU 1 (
echo [%date% %time%]: 开始编译,delete pre log file:!BUILD_log!
if exist !BUILD_log! del !BUILD_log!

echo [%date% %time%]: 开始编译,[!BUILD_TYPE!]{!BUILD_PROJECT!}
echo [%date% %time%]: 开始编译,[!BUILD_TYPE!] !BUILD_SLN!

%DEVENV% !BUILD_SLN_PATH! /Rebuild !BUILD_TYPE! /out !BUILD_log!

echo [%date% %time%]: 编译完成{!BUILD_PROJECT!}

rem 校验编译结果
echo [%date% %time%]: 开始校验编译结果 ...
FOR /F "tokens=6 delims= " %%i IN ('FIND /N "=====" !BUILD_log! ') DO SET e1=%%i
IF !e1! NEQ 0 ECHO 工程"!BUILD_SLN_PATH!"有!e1!个错误!

echo [%date% %time%]: 校验编译结果完毕 ...
IF !e1! NEQ 0 COLOR 84 & GOTO End
rem 校验完毕

rem 打印编译输出信息
rem notepad build.log
type !BUILD_log!
)

set /a bProcess=1
)
rem ======================for end=====================
goto End

:EnvError
@echo 环境变量设置有误

:End
pause

 

你可能感兴趣的:(batch)