【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
posted @ 2021-03-03 19:24  Char-z  阅读(988)  评论(0)    收藏  举报