BAT

批处理文件批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件, 由一系列命令构成,其中可以包含对其他程序的调用。 这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad) 等任何文本文件编辑工具创建和修改批处理文件。

windows批处理教程

更有趣味性

BAT批处理脚本教程

更加系统,相对缺乏趣味性。

Hello world

创建一个文件 baiduping.bat,notepad 打开。内容如下:

ping baidu.com >> baiduping.txt

双击运行。可以在统计目录下发现文件 baiduping.txt,测试内容如下:

正在 Ping baidu.com [111.13.101.208] 具有 32 字节的数据:
来自 111.13.101.208 的回复: 字节=32 时间=37ms TTL=50
来自 111.13.101.208 的回复: 字节=32 时间=32ms TTL=50
来自 111.13.101.208 的回复: 字节=32 时间=25ms TTL=50
来自 111.13.101.208 的回复: 字节=32 时间=26ms TTL=50

111.13.101.208 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 25ms,最长 = 37ms,平均 = 30ms

  1. Ctrl+C 组合键可强行终止一个批处理的执行过程。

(TODO: 以下暂时列出目录,具体内容尚未补充。)

常用批处理内部命令简介

批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)

在命令行输入,可以查阅对应 name 命令行的文本解释。

name /?

常见命令

1、REM 和 ::
2、ECHO 和 @
3、PAUSE
4、ERRORLEVEL
5、TITLE
6、COLOR
7、mode 配置系统设备
8、GOTO 和 :
9、FIND
10、START
11、assoc 和 ftype
12、pushd 和 popd
13、CALL
14、shift
15、IF
16、setlocal 与 变量延迟
17、ATTRIB  显示或更改文件属性

常用特殊符号

1、@  命令行回显屏蔽符
2、%  批处理变量引导符
3、>   重定向符
4、>>  重定向符
5、<、>&、<& 重定向符
6、|  命令管道符
7、^  转义字符
8、&  组合命令
9、&& 组合命令
10、||  组合命令
11、""  字符串界定符
12、, 逗号
13、; 分号
14、() 括号
15、! 感叹号
16、批处理中可能会见到的其它特殊标记符: (略)
    CR(0D) 命令行结束符 
    Escape(1B) ANSI转义字符引导符 
    Space(20) 常用的参数界定符 
    Tab(09) ; = 不常用的参数界定符 
    + COPY命令文件连接符 
    * ? 文件通配符 
    / 参数开关引导符 
    : 批处理标签引导符 

DOS循环:for命令详解

FOR命令中的变量

  • 变量
~I          - 删除任何引号("),扩展 %I
%~fI        - 将 %I 扩展到一个完全合格的路径名
%~dI        - 仅将 %I 扩展到一个驱动器号
%~pI        - 仅将 %I 扩展到一个路径
%~nI        - 仅将 %I 扩展到一个文件名
%~xI        - 仅将 %I 扩展到一个文件扩展名
%~sI        - 扩展的路径只含有短名
%~aI        - 将 %I 扩展到文件的文件属性
%~tI        - 将 %I 扩展到文件的日期/时间
%~zI        - 将 %I 扩展到文件的大小
%~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
              到找到的第一个完全合格的名称。如果环境变量名
              未被定义,或者没有找到文件,此组合键会扩展到
              空字符串

Util

  • CmdUtil.java
package com.ryo.bat.util.util;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 命令行工具类
 * Created by bbhou on 2017/7/27.
 */
public final class CmdUtil {

    private static final Logger LOG = LogManager.getLogger(CmdUtil.class);

    /**
     * 执行cmd命令行
     * @param cmdFilePath cmd 文件路径
     * @since 1.7
     */
    public static void execute(final String cmdFilePath) throws IOException,
            InterruptedException {
        try{
            //抛出io异常
            Process process=Runtime.getRuntime().exec(cmdFilePath);
            //返回输入流
            InputStream in=process.getInputStream();
            //封装输入流
            BufferedReader reader=new BufferedReader(new InputStreamReader(in));
            String line=null;
            //逐行读取信息
            while((line=reader.readLine())!=null){
                System.out.println(line);
            }
            reader.close();//关流
            process.waitFor();
            process.destroy();//抛出InterruptedExeption异常
        }catch(IOException | InterruptedException e){
            e.printStackTrace();
        }
    }

    private CmdUtil(){}
}

简单的 bat 命令

上传 git

:: 用于提交当前变更(windows)
:: author: houbb
:: LastUpdateTime:  2018-11-22 09:08:52
:: 用法:双击运行,或者当前路径 cmd 直接输入 .\cgit.bat

git add .
git commit -m "[Feature] add for new"
git push
git status

指定参数

TODO…

参考资料

批处理中使用命令行传递给批处理参数