批处理简介及常用命令
批处理简介
批处理是为了自动执行重复命令,来减轻重复工作,以使工作容易高效。复杂的批处理需要使用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
重定向操作符 | 描述 |
| 将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。覆盖原文件。 |
| 从文件而不是从键盘或句柄读入命令输入。 |
| 追加内容到文件末尾,指定文件如果不存在,则自动生成该文件 |
| 将一个句柄的输出写入到另一个句柄的输入中。 |
| 从一个句柄读取输入并将其写入到另一个句柄输出中。 |
| | 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。 |