批处理简介及常用命令

批处理简介

批处理是为了自动执行重复命令,来减轻重复工作,以使工作容易高效。复杂的批处理需要使用while、for、if、goto等命令。批处理文件可以像exe程序一样执行,还可以被当前系统下其他软件调用运行,也可以调用当前系统下的软件。批处理是后缀为bat的文本文件,可通过双击bat文件运行批处理,文件中的命令按序依次运行。

常用命令

关于批处理的命令解释,这篇博客写得很详细了,可以参考一下:


最近在写一个自动化文件打包归档的批处理,所以主要介绍下屏幕回显,自定义变量,复制文件,压缩解压文件,输入输出重定向等命令

屏蔽回显

@  命令行回显屏蔽符,关闭单行回显

echo off  从下一行开始关闭回显

@echo off  从本行开始关闭回显。一般批处理第一行都是这个。

echo on 从下一行开始打开回显

echo 显示当前是 echo off 状态还是 echo on 状态

echo. 输出一个回车换行

自定义变量

set var=Hello,world!
echo %var%

如果我们想让用户手工输入变量的值,而不是在代码里指定,可以用set命令的/p参数

set /p var=Please input the value :
echo %var%

等号右边的是提示语,不是变量的值,变量的值是运行后用户输入的值

考虑到读取一行文本时所遇到的扩充的限制,延迟环境变量扩充是很有用的。以下例子说明直接变量扩充的问题:

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)

不会显示消息,因为在读到第一个 IF 语句时,两个 IF 语句中的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个复合语句。所以,复合语句中的 IF 实际上是在比较 “before” 和
“after”,这两者永远不会相等。

延迟环境变量扩充允许你使用一个不同的字符(惊叹号)在执行时扩充环境变量。如果延迟的变量扩充被启用,可以将上面的例子写成以下所示,以达到预期效果:

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)

复制文件

复制文件和目录树。

XCOPY source [destination] [/S [/E]] [/C] [/Q] [/F] [/L] [/H] [/R] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]

  source   指定要复制的文件。
  destination  指定新文件的位置和/或名称。
  /S   复制目录和子目录,不包括空目录。
  /E   复制目录和子目录,包括空目录。
  /C   即使有错误,也继续复制。
  /Q   复制时不显示文件名。
  /F   复制时显示完整的源文件名和目标文件名。
  /L   显示要复制的文件。
  /H   也复制隐藏文件和系统文件。
  /R   覆盖只读文件。
  /U   只复制已经存在于目标中的文件。
  /K   复制属性。一般的 Xcopy 会重置只读属性。
  /N   用生成的短名称复制。
  /O   复制文件所有权和 ACL 信息。
  /X   复制文件审核设置(隐含 /O)。
  /Y   取消提示以确认要覆盖现有目标文件。
  /-Y  要提示以确认要覆盖现有目标文件。
  /Z   在可重新启动模式下复制网络文件。
  /B   复制符号链接本身与链接目标。
  /J   复制时不使用缓冲的 I/O。推荐复制大文件时使用。

压缩解压文件

%rar% e -ad -y "%SourcePath%\xxx.tar" "%SourcePath%\"
e解压文件到当前目录
-ad添加压缩文件名到目标路径
-y对所有的回答默认选是

%rar% a -r "%SourcePath%\xxx.tar" "%SourcePath%\"
a解压压缩文件到当前目录
-r包含子文件夹

输入输出重定向

程序或者脚本使用标准输入文件(stdin)读取内容,标准输出(stdout)输出文件或者打印文本到屏幕上,标准错误(stderr)输出错误信息到屏幕上

这3个标准流使用数字0,1,2进行标记。标准输入是文件0,标准输出是文件1,标准错误是文件2

要指定重定向到现有句柄,请使用与 (&) 字符,后面接要重定向的句柄号(即 &句柄号)。例如,下面的命令可以将句柄 2(即 stdin)重定向到句柄 1(即 stdout):

2>&1

重定向操作符

描述

>

将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。覆盖原文件。

<

从文件而不是从键盘或句柄读入命令输入。

>>

追加内容到文件末尾,指定文件如果不存在,则自动生成该文件

>&

将一个句柄的输出写入到另一个句柄的输入中。

<&

从一个句柄读取输入并将其写入到另一个句柄输出中。

|

从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。