Windows下Bat批处理

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

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

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

批处理是一种简化的脚本语言,也称作。它应用于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

 

Windows下,可以使用bat批处理脚本批量检测远程端口。Telnet是一种远程终端连接服务,可以通过它来连接到远程主机的特定端口。以下是一个使用Telnet命令在批处理脚本批量检测远程端口的例子: @echo off setlocal set ip_list=file_path\ip_list.txt set port=80 for /f %%i in (%ip_list%) do ( telnet %%i %port% | find "Connected" > nul if errorlevel 1 ( echo %%i:%port% is closed ) else ( echo %%i:%port% is open ) ) pause 在以上示例中,首先我们定义了要检测的IP列表文件的路径,即ip_list.txt文件,然后我们设定了要检测的端口号,此处设定为80端口。接着使用for循环读取ip_list.txt文件中的每个IP地址。 在每次循环中,我们使用telnet命令连接到远程主机的指定端口。如果端口成功连接,则表示端口是开放的,telnet命令的输出会包含"Connected"关键字。我们使用find命令查找telnet命令的输出中是否包含"Connected"关键字。 如果find命令找到了"Connected"关键字,则说明端口是开放的,我们将显示"IP地址:端口号 is open"的消息。否则,即端口未连接,我们将显示"IP地址:端口号 is closed"的消息。 最后,我们使用pause命令来暂停脚本的运行,以便我们可以查看检测结果。 需要注意的是,Telnet命令在默认情况下可能未启用,需要手动在Windows设置中启用Telnet客户端功能。此外,Telnet命令在Windows 10及更高版本中可能已被淘汰,可以考虑使用其他工具如ncat或PowerShell来代替Telnet命令进行远程端口检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值