首页 > 其他分享 >bat-4-批处理的执行与调用

bat-4-批处理的执行与调用

时间:2024-05-16 11:21:24浏览次数:19  
标签:脚本 bat 调用 窗口 批处理 echo 命令

批处理 执行的两种方式

第一种方式:直接右键以管理员身份运行,批处理的当前路径默认为 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来指定一个操作模式。

  1. 如果用户在运行脚本时没有提供足够的参数,未使用的变量将不会被定义。

  2. 使用 shift命令 可以将参数向左移一位

SHIFT 命令支持/n选项,该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。

SHIFT [/n]

SHIFT /2  会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
  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 选项的作用是等待启动的新窗口关闭后才会继续执行后续命令。

如果命令扩展被启用:

  1. 将文件名作为命令键入,非可执行文件可以通过文件关联调用。(例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
    关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和 FTYPE 命令。

  2. 查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,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 前面的冒号是必须的。

标签:脚本,bat,调用,窗口,批处理,echo,命令
From: https://www.cnblogs.com/jiyuchen1/p/18182746

相关文章

  • bat-3-if判断
    if语句基本语法IF[NOT]string1==string2commandIF[NOT]EXISTfilenamecommandIF[NOT]ERRORLEVELnumbercommandstring1==string2如果指定的文字字符串匹配,则为true。EXISTfilename如果指定的文件名存在,则为true。ERRORLEVELnumber如果上一条命令返回......
  • 避免DbContext同时在多个线程调用
    下面这个微软官方文档阐述了,应该避免在多个线程上同时操作同一个DbContext:AvoidingDbContextthreadingissues其中有说到,在使用DbContext的代码中,所有的异步函数应该立即被await,否则会有极大概率抛出InvalidOperationException。这是因为一个DbContext实例不能被多个线程同时......
  • MyBatis-Plus 实现多租户管理的实践
    本文主要讲解使用Mybatis-Plus结合dynamic-datasource来实现多租户管理在现代企业应用中,多租户(Multi-Tenant)架构已经成为一个非常重要的设计模式。多租户架构允许多个租户共享同一应用程序实例,但每个租户的数据彼此隔离。实现这一点可以大大提高资源利用率并降低运营成本。在本......
  • 子类调用父类构造方法例题
    这段代码定义了三个类:Father(父类)、Child(子类)和Test(测试类)。首先,main方法执行newChild();时,会调用子类的构造函数。父类子类在子类Child的无参构造函数中,首先调用了this("dd"),这实际上是调用了Child类的有参构造函数但是,在子类Child的有参构造函数中,又调用了super("dd"),这......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——高性能的 gRPC
    远程过程调用RPC——高性能的gRPC gRPC,这一由Google推出的高性能、开源、通用RPC框架,凭借其众多引人注目的特性,已成为业界瞩目的焦点。它基于HTTP/2协议标准设计开发,并采用ProtocolBuffers作为默认的数据序列化协议,广泛支持多种编程语言。gRPC不仅简化了服务的精确定义,而且......
  • mit6.828笔记 - lab3 Part B:页面故障、断点异常和系统调用
    PartB页面故障、断点异常和系统调用虽然说,我们故事的主线是让JOS能够加载、并运行user/hello.c编译出来的镜像文件。虽然说,经过PartA最后几节,我们初步实现了异常处理的基础设施。但是对于操作系统来说,还远远不够,比如说那个trap_dispatch还没完成。所以在回到故事主线之......
  • mybatis及mybatis-plus的实体映射
    packagecom.duxiang.backgroundmanagement.entity;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;1.mybatisimportjavax.persistence.*;@Data@AllArgsConstructor@NoArgsConstructor@Table(name="m_chat")/......
  • Mybatis-Plus中 updateById 无法将已有值的字段更新为 null
    在MyBatis-Plus中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略。1、调整全局策略(会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null)mybatis-plus:global-config:db-config:insert-stra......
  • ibatis-LruCache
    核心对象当Map存储key数量超出初始化设置的size时,标记最老的key,下次put时会自行删除eldestkey。Map<Object,Object>keyMap=newLinkedHashMap();为什么使用LinkedHashMap?支持头、尾,快速获取头结点,从Map中快速删除数据。实现removeEldestEntry方法,用于获取eldestKey。putO......
  • ibatis-FifoCache
    核心代码Deque<Object>keyList=newLinkedList<>();为什么使用LinkedList?单向链表。使用LinkedList实现FIFO,支持头、尾节点的单向链表。添加时,判断数量大于初始化值时,删除头结点。源码:publicclassFifoCacheimplementsCache{privatefinalCachedelegate;pri......