【bat脚本】常见命令
Batch Script
如有错误,欢迎指出
学习站点:
常见命令
注释
批脚本中只支持行注释。
rem 用于在批处理文件中添加注解或说明,且该命令会输出一个换行;
: 后紧跟一个:或空格、制表符也可起到注释的作用。
ECHO 和 @
echo用以显示消息和启用或关闭命令回显。
使用不带参数的echo将显示当前回显设置,使用echo [on | off]打开或关闭回显功能。
显示消息时,该命令将在消息后输出两个换行。
若
echo紧跟一个.,那个将输出空的消息,如果其后又紧跟文本,那么.将被视为,即echo.hi等同于echo hi。
将@置于命令前,将关闭该命令本身的回显。
CLS
清除屏幕。
PAUSE
暂停批处理程序,并显示以下消息:
请按任意键继续. . .
若要显示其它提示语,可以使用echo [other prompt] & pause > nul。
TITLE
设置命令提示窗口的窗口标题。
GOTO
将 cmd.exe 定向到批处理程序中带标签的行。
GOTO label
label 指定批处理程序中用作标签的文字字符串。
标签必须单独一行,并且以冒号打头。
使用特殊标签``goto :eof将控制转移到当前批脚本文件的结尾,注意eof前有:。经过试验,一般的标签前加上:`后仍可有效跳转。
FIND
在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] "string" [[drive:][path]filename[ ...]]
| param | meaning |
|---|---|
| /V | 显示所有未包含指定字符串的行 |
| /C | 仅显示包含字符串的行数 |
| /N | 显示行号 |
| /I | 搜索字符串时忽略大小写 |
| "string" | 指定要搜索的文本字符串 |
| [drive:][path]filename | 指定要搜索的文件 |
如果没有指定路径,FIND 将搜索在提示符处键入的文本或者由另一命令产生的文本。
CMD
启动 Windows 命令解释器的一个新实例。
/C 执行字符串指定的命令然后终止
/K 执行字符串指定的命令但保留
如果指定了 /C 或 /K,则会将该开关之后的剩余部分作为一个命令行处理。
START
启动一个单独的窗口以运行指定的程序或命令。
START ["title"] [/D path] [/MIN] [/MAX] [command/program] [parameters]
-
"title" 在窗口标题栏中显示的标题。
-
path 启动目录。
-
MIN 以最小化方式启动窗口。
-
MAX 以最大化方式启动窗口。
-
command/program
- 如果它是内部 cmd 命令或批文件,则该命令处理器是使用 cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口将仍然存在。
- 如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将作为一个窗口化应用程序或控制台应用程序运行。
-
parameters 这些是传递给 command/program 的参数。
PUSHD 和 POPD
- pushd
- 保存当前目录以供 POPD 命令使用,然后改到指定的目录。
- popd
- 更改到 PUSHD 命令存储的目录。
SHIFT
更改批处理文件中可替换参数的位置。
SHIFT [/n]
如果命令扩展被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。
例如:SHIFT /2会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
IF
条件判断执行批处理程序中的条件处理。
IF [NOT] ERRORLEVEL number command
如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
ELSE 子句
必须出现在同一行的 IF 之后,如:(由括号包围的语句将被视为一个整体,且在语法上被视为一行)
@echo off
echo hello
fakeCommand
if not errorlevel 1 (
echo world
) else (
echo "That's impossible."
)
exit
EXIT
退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。
EXIT [/B] [exitCode]
/B 仅退出当前批脚本而不关闭 CMD.EXE。如果在批脚本外执行,则仍会关闭 CMD.EXE。
exitCode 指定一个数字。如果指定了 /B,将ERRORLEVEL设成该数字;否则退出 CMD.EXE,并用该数字设置过程退出代码。
CALL
在一个批脚本文件中调用另一个批脚本文件,并传递参数。
CALL [drive:][path]filename [batch-parameters]
该命令亦有如下形式:
CALL :label arguments
这将创建一个新的批脚本文件上下文,并传递参数。那么如何从这种调用中退出呢?因为上下文被视为一个批脚本文件,所以当控制流到达文件结尾时,该上下文便会结束,即使用goto :eof。
示例
@echo off
call :func1 pass arguments as parameters
call :func2
exit /b
:func1
echo %*
echo Hello
goto :eof
:func2
echo World
goto :eof
批脚本上下文的参数
注意:这里的参数指的是
parameter
批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)
可使用以下语法对批参数(%n)进行替换:
%~1 - 删除引号("),扩展 %1
%~f1 - 将 %1 扩展到一个完全合格的路径名
%~d1 - 仅将 %1 扩展到一个驱动器号
%~p1 - 仅将 %1 扩展到一个路径
%~n1 - 仅将 %1 扩展到一个文件名
%~x1 - 仅将 %1 扩展到一个文件扩展名
%~s1 - 扩展的路径只含有短名
%~a1 - 将 %1 扩展到文件属性
%~t1 - 将 %1 扩展到文件的日期/时间
%~z1 - 将 %1 扩展到文件的大小
%~$PATH:1 - 查找列在 PATH 环境变量的目录,并将 %1 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此修改符会扩展到空字符串。
可以组合修改符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
在上面的例子中,%1 和 PATH 可以被其他有效数值替换。%~ 语法终止于第一个有效参数号码。
特殊变量
errorlevel
类似于bash中的?变量,使用echo %errorlevel%查看。一般当命令成功执行时,其值为0。
cd和__cd__
C:\Users\never>echo %cd%
C:\Users\never
C:\Users\never>echo %__cd__%
C:\Users\never\
for loop
标准界定符(delimiter)
- Space
- Comma ( , )
- Semi-colon ( ; )
- TAB
Default
语法
FOR %%var_name IN (list) DO command
- var_name
- 只能是单个字符;
- 声明及引用时都需要
%%前缀,若在命令行中使用,则只需单个%前缀; - 大小写敏感
- list 中的元素由标准界定符分隔
事实上,list被认为是文件列表,所以也可以在其中使用通配符,这会自动展开成列表
示例
for %%x in (1 2 3 d:\msys64\*) do @echo %%x
/R
Recurse loop
FOR /R [path] %%variable IN ( set_of_file_filters ) DO command
-
以 [path] 为根目录进行递归遍历,如果未指定 [path] ,则以当前目录为根目录。
-
如果 set 是
.,那么将仅遍历目录树。
/L
FOR /L %variable IN (start,step,end) DO command
/D
/D只遍历目录,如果未指定,则只遍历文件。
for /d %x in (*) do @echo %x

浙公网安备 33010602011771号