批处理 执行的两种方式
第一种方式:直接右键以管理员身份运行,批处理的当前路径默认为 C:\windows\system32
第二种方式:在管理员身份的cmd窗口中 .\xxx.bat
执行,批处理的当前路径默认为当前目录
在批处理 中使用相对路径 时,是相对于 当前路径 去寻找文件的
如果在批处理所在目录下存放了一些 安装程序,使用bat安装程序时,
当批处理以管理员身份运行时,不会去bat所在目录去找 exe文件,而是去C:\Windows\system32
寻找,提示不是内部命令
脚本执行时接受参数(%0
~ %9
)
批处理中有10个特殊的形式变量:%0
~ %9
,它们用于访问传递给批处理脚本的命令行参数。
这些变量的具体作用如下:
%0
:代表批处理脚本本身的完整路径和文件名。当你运行批处理时,这个变量会包含你执行的命令,比如C:\path\to\script.bat。
%1
到 %9
:这些变量代表用户在运行批处理脚本时提供的命令行参数。每个参数从%1
开始,按顺序分配。例如,如果你运行script.bat arg1 arg2 arg3
,%1
将是arg1,%2
将是arg2,%3
将是arg3。如果有超过9个参数,后面的参数将无法通过这些变量直接访问。
这些变量在批处理脚本中非常有用,因为它们允许脚本根据接收到的参数来执行不同的操作。例如,你可能会用%1
来决定要处理哪个文件,或者%2
来指定一个操作模式。
-
如果用户在运行脚本时没有提供足够的参数,未使用的变量将不会被定义。
-
使用 shift命令 可以将参数向左移一位
SHIFT 命令支持/n
选项,该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。
SHIFT [/n]
SHIFT /2 会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
- 可以使用类似于for语句的中形式变量增强写法
%0
:代表批处理脚本本身的完整路径和文件名,可以使用类似于for语句的中形式变量增强写法。
示例:
%~d0 获取当前盘符
%~dp0 获取当前批处理文件所在盘符和路径
%~f0 获取当前批处理文件全路径
@REM main.bat 1 2 3 4 5 6 7 8 9
@REM shift /0
echo 0000
echo %0
echo 0001
echo %1
echo 0002
echo %2
echo 0003
echo %3
echo 0004
echo %4
echo 0005
echo %5
echo 0006
echo %6
echo 0007
echo %7
echo 0008
echo %8
echo 0009
echo %9
start命令
启动一个单独的窗口以运行指定的程序或命令。
"title"
在窗口标题栏中显示的标题。- 创建窗口方式执行
/MIN
以最小化方式启动窗口。默认值
/MAX
以最大化方式启动窗口。
- 不创建窗口方式执行
/B
启动应用程序,但不创建新窗口(在当前窗口打印)。
- 指定启动时的目录
/D path
启动目录/I
新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。
/WAIT
启动应用程序并等待它终止(应该是等待启动的窗口关闭)。
默认情况下,start命令执行之后会立即返回,不等待新启动的应用程序或窗口关闭。这意味着当前脚本会继续执行下一条命令,而不会等待新进程结束。
/wait
选项的作用是等待启动的新窗口关闭后才会继续执行后续命令。
如果命令扩展被启用:
-
将文件名作为命令键入,非可执行文件可以通过文件关联调用。(例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和 FTYPE 命令。 -
查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用 Explorer。如果从命令行执行,则等同于对那个路径作
CD /D
。
call命令
从批处理程序调用另一个批处理程序。
CALL [drive:][path]filename [batch-parameters]
batch-parameters 指定批处理程序所需的命令行信息。
call命令主要用于调用另一个批处理文件或在当前批处理文件中调用一个标签(通过:label定义)。
@echo off
goto calltest
:asd
echo 12312124124
goto end
:calltest
call :asd
:end
pause>nul
goto命令
GOTO 将 Windows 命令解释程序(cmd.exe)定向到批处理程序中某个带标签的行。
GOTO label --跳转到标签label
:label --声明一个标签。标签必须单独一行,并且以冒号打头。
如果命令扩展被启用,会启用一个特殊的预定义标签 :EOF
,表示文件的末尾。你不需要在脚本中显式地声明EOF标签,可以直接使用.
goto :eof
记住,eof
前面的冒号是必须的。