目录
:行注释,不会有命令回显
:: 行注释,不会有命令回显
%行注释,不会有命令回显,不常用,慎用%
rem 注释内容,会有命令回显
goto label
块注释,以[goto label]开始[:label]结尾。
label自定义,有命令回显:goto label
:label
@echo off/on
表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显
echo off/on
表示关闭其他所有命令(不包括本身这条命令)的回显
echo.
中间没有空格,表示换行
echo Y|DEL ./test
使用管道命令,确认删除文件
echo helloworld>nul
相当于不输出到标准控制台
%0代指批处理文件自身
%1 代表接收的第一个参数,一共1-9个参数
%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
%CD% 本地 返回当前目录字符串。
%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关
date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。用户主目录是在“本地用户和组”中指定的。
%LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统返回处理器的芯片体系结构。值x86或IA64基于Itanium
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION% 系统 返回处理器的版本号。
%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统返回包含系统根目录的驱动器。
%SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。
%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。
%TIME% 系统返回当前时间。使用与 time /t 命令相同的格式
%USERDOMAIN% 本地 返回包含用户帐户的域的名称。
%USERNAME% 本地 返回当前登录的用户的名称。
%USERPROFILE% 本地 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
%i 可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;
set path=%~dp0
set path=c:/windows
echo %path%
set var=0
set /a var+=1 // /a表示expression 即可以用各种表达式为变量赋值。
set /p var=请输入变量的值 //接收用户键盘输入
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
结果:
1
2
3
4
5
>> 重定向符,传递并在文件的末尾追加,而>是覆盖
> 输出重定向
<< 输入追加
< 输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
^ 是对特殊符号<,>,&的前导字符,echo test ^>1.txt
& 第一条命令 & 第二条命令,当第一个命令执行失败了,也不影响后边的命令执行。
&& 第一条命令 && 第二条命令,当碰到执行出错的命令后将不执行后面的命令
|| 第一条命令 || 第二条命令,当一条命令失败后才执行第二条命令
"" 双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
, 逗号相当于空格,在某些情况下“,”可以用来当做空格使
() 左右括号必须成对使用,括号中可以包括多行命令
! 在变量延迟问题中,用来表示变量,即%var%应该表示为!var!
在新窗口中执行命令
start "新窗口标题" mvn clean install –DskipTests
start /max "新窗口标题" mvn clean install –DskipTests
start /min "新窗口标题" mvn clean install –DskipTests
:: 等任务执行完,手动关闭窗口后,进行下一个任务
start /w "新窗口标题" mvn clean install –DskipTests
从批处理程序调用另一个批处理程序,并且不终止父批处理程序
call mvn clean install -DskipTests
IF [NOT] ERRORLEVEL number (command) // 一般返回值为0表示成功,1表示失败。
IF [NOT] string1==string2 (command) //如果字符串相等
IF [NOT] EXIST filename (command) //如果filename文件存在
if [NOT] %num1% LSS %num2% //num1如果小于num2
if [NOT] %num1% LEQ %num2% //num1如果小于等于num2
if [NOT] %num1% gtr %num2% //num1如果大于num2
if [NOT] %num1% geq %num2% //num1如果大于等于num2
if [NOT] %num1% EQU %num2% //num1如果等于num2
if [NOT] %num1% NEQ %num2% //num1如果不等于num2
if defined var //变量var是否被定义
FOR 参数 %%变量名 IN (相关文件或命令) DO (执行的命令)
%%变量名:
可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;
参数:
/d 表示目录,它只显示指定目录下的目录名字,例如for /d %%i in (*) do @echo %%i
/r 表示递归指定目录及子目录,例如for /r c:\ %%i in (*.exe) do @echo %%i
语法为FOR /R [[drive:]path] %%variable IN (set) DO command
/l 表示迭代数值范围,例如for /l %%i in (1,1,5) do @echo %%i
语法为for /l %%Variable in (Start,Step,End) do Command
/f 依次将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,
FOR /F ["options"] %%i IN (file) DO command
FOR /F ["options"] %%i IN ("string") DO command
FOR /F ["options"] %%i IN ('command') DO command
Skip:跳过这些无用的行,直接从第N+1行开始处理
Delims:用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键
tokens:delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个
eol用来指定当一行以什么符号开始时,就忽略它。
for /f "skip=2 eol=. tokens=2,3 delims= ," %%i in (a.txt) do echo %%i %%j
Pause 暂停命令执行
%~0 删除任何引号(")
%~f0 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 仅将 %0 扩充到一个驱动器号
%~p0 仅将 %0 扩充到一个路径
%~n0 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 仅将 %0 扩充到一个文件扩展名
%~s0 扩充的路径只含有短名(“s”为Short,短的)
%~a0 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 将 %0 扩充到文件的大小(Size 大小)
%var:~startIndex,charNum%
startIndex正数时从0开始从左到右,负数时从1开始从右到左。
charNum 正数表示截取charNum个字符,负数表示从右到左丢掉charNum个字符,再截取从startIndex到结尾的字符串
str=0123456
str:~2,4=2345
str:~-4,2=34
str:~2,-4=2
str:~-4,-2=34
%变量:旧文本=新文本%
set aa=伟大的中国!我为你自豪!
echo 替换前:%aa%
echo 替换后:%aa:中国=中华人民共和国%
%变量:旧文本=新文本%
set str=0123456
echo %str%|findstr "^abc">nul
echo errorlevel=%errorlevel%
echo %str%|findstr "^012">nul
echo errorlevel=%errorlevel%