Bat批处理脚本中的call命令、start命令、pushd和popd命令

今天介绍三个命令,call命令、start命令、pushd和popd命令。

1. call命令

call命令,从批处理程序调用另一个批处理程序,还可以调用指定标号后面的所有命令。语法格式:

CALL [drive:][path]filename [batch-parameters]

参数说明:

  • [Drive:] 被调用批处理文件的盘符;
  • [Path] 被调用批处理文件路径;
  • fileName 被调用的批处理文件名;
  • [batch-parameters] 批处理程序所需的命令行参数信息;

当被调用的批处理文件与正在执行的批处理文件在同一个目录下时,可以省略被调用批处理文件的盘符和文件路径,即[drive:]和[path]可以不写。

实例:创建2个批处理文件,1.bat和2.bat,在1.bat中调用2.bat

① 1.bat的内容

@echo off
echo 1.bat
call 2.bat
call C:\Users\Administrator\Desktop\BAT\2.bat
pause

② 2.bat的内容

echo off
echo 这是一个2.bat文件

运行1.bat,输出结果:

可以看到,被调用的批处理文件2.bat与正在执行的批处理文件1.bat在同一个目录下时,可以省略被调用批处理文件的盘符和文件路径。

call语句扩展

在命令扩展启用时,call命令可以调用指定标签后面的语句,即调用子程序,语法格式:

CALL :label [arguments]

参数说明:

  • :label 指定调用位置的标签,与goto语句使用的标签类似;
  • [arguments] 对于以:label开头的批处理程序,指定要传送给其新实例的命令信息,包括命令行选项、文件名、批处理参数或者变量;

实例:在批处理脚本1.bat中创建:print标签,然后使用call :print调用该标签。

@echo off
echo 我是1.bat文件
call :print
goto end
 
:print
echo 这里是print标签的信息
goto :eof
:end
 
pause

运行结果:

call参数扩展

(1)批处理脚本里的 %* 指出所有的参数,%1指出第一个参数,%2指出第二个参数,以此类推,实例:通过1.bat脚本的call命令调用2.bat并指定参数,列出所有参数和第3个参数;

1.bat的内容

@echo off
echo 第一个bat文件1.bat
call 2.bat arg1 arg2 arg3 arg4 arg5
pause

2.bat的内容

@echo off
echo 第二个bat文件2.bat
echo 所有参数:%*
echo 第3个参数:%3

运行结果:

(2)批处理参数(%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 的输出行。

%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %* 使用。
实例:生成一个临时文件 AA.txt,先将目录 C:\windows 设置为当前目录,调用子程序进行参数扩展;然后再恢复当前目录,调用子程序;观察参数扩展结果;

@echo off
echo 产生一个临时文件 > AA.txt
 
REM 下行先保存当前目录,再将 c:\windows 设为当前目录
pushd c:\windows
call :sub "AA.txt"
 
REM 下行恢复前次的当前目录
popd
call :sub AA.txt
pause

rem 删除AA.txt文件
del AA.txt
exit
 
:sub
echo 删除引号: %1
echo 扩充到路径: %~f1
echo 扩充到一个驱动器号: %~d1
echo 扩充到一个路径: %~p1 
echo 扩充到一个文件名: %~n1
echo 扩充到一个文件扩展名: %~x1
echo 扩充的路径指含有短名: %~s1 
echo 扩充到文件属性: %~a1 
echo 扩充到文件的日期/时间: %~t1 
echo 扩充到文件的大小: %~z1 
echo 扩展到驱动器号和路径:%~dp1
echo 扩展到文件名和扩展名:%~nx1
echo 扩展到类似 DIR 的输出行:%~ftza1
echo.
 
goto :eof

运行结果:

2. start命令

start命令作用是启动一个单独的窗口以运行指定的程序或命令。

语法格式:

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

参数说明:

  • “title” 窗口标题栏中显示的标题。

  • path 启动目录。

  • B 启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断该应用程序的方式。

  • I 新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。

  • MIN 以最小化方式启动窗口。

  • MAX 以最大化方式启动窗口。

  • SEPARATE 在单独的内存空间中启动 16 位 Windows 程序。

  • SHARED 在共享内存空间中启动 16 位 Windows 程序。

  • LOW 在 IDLE 优先级类中启动应用程序。

  • NORMAL 在 NORMAL 优先级类中启动应用程序。

  • HIGH 在 HIGH 优先级类中启动应用程序。

  • REALTIME 在 REALTIME 优先级类中启动应用程序。

  • ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。

  • BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。

  • NODE 将首选非一致性内存结构 (NUMA) 节点指定为十进制整数。

  • AFFINITY 将处理器关联掩码指定为十六进制数字。进程被限制在这些处理器上运行。当 /AFFINITY 和 /NODE 结合时,会对关联掩码进行不同的解释。指定关联掩码,正如 NUMA 节点的处理器掩码正确移动到零位起始位置一样。进程被限制在指定关联掩码和 NUMA 节点之间的那些通用处理器上运行。如果没有通用处理器,则进程被限制在指定的 NUMA 节点上运行。

  • WAIT 启动应用程序并等待它终止。

  • command/program 如果它是内部 cmd 命令或批文件,则该命令处理器是使用 cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口将仍然存在。如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将作为一个窗口化应用程序或控制台应用程序运行。

  • parameters 这些是传递给 command/program 的参数。

注意:在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

实例:使用 start 命令启动 calc.exe windows系统自带的计算器程序。

@echo off
start calc.exe

运行效果:

关于start命令的其他参数,这里就不一一列举了,大家感兴趣的话自行测试一下吧。

3.pushd命令 和 popd命令

pushd 和 popd 这两个命令一般是同时使用的;

pushd命令:作用是将当前目录的路径保存下来,并且切换到你指定的新目录路径。
popd命令:作用是将当前目录切换到 pushd 命令存储的目录路径。

语法格式:

PUSHD [path | ..]

POPD

参数说明:

  • path 指定你要切换的目标目录路径

实例:使用 pushd命令 切换到 D:\ 盘,然后使用 popd 命令切换到执行 pushd 之前的目录。

@echo off
echo 当前目录是:%cd%
rem 用pushd命令将目录切到”D:\“
pushd "D:\"
echo 切换后的新目录是:%cd%

rem 用popd命令将目录切回执行pushd命令之前的目录
popd
echo 执行pushd命令之前的目录是:%cd%

pause

运行结果:

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITPro进化论

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值