Bat 指令

本文详细介绍了BAT脚本的基本概念、命令符的使用、变量处理、条件判断、循环、网络配置、Java执行、系统环境变量管理以及如何解决批处理文件一闪而过的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bat 脚本【批处理文件】

一:介绍
1. bat文件是dos下的批处理文件(无格式的文本文件,它包含一条或多条命令);
2. 文件拓展名可为.bat 或 .cmd;
3. 在命令提示下输入文件的名称,或者双击该文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行;
4. 编码方式
@rem 声明编码方式 UTF-8 GB2312
@rem chcp 65001 UTF-8的
@rem chcp 936 默认的GBK
@rem chcp 437 是美国英语
二:命令符:
1. start 是在新窗口运行调用的文件,call是在当前的窗口运行。 start /wait是指启动应用程序并等待其结束
  1. @ : 隐藏@后面的命令(在命令行窗口中不显示当前正在运行的命令);

  2. echo

1. 打开回显或关闭请求回显;
	echo on/off: off状态相当于加了@,不显示执行命令;
2. 也可用于显示消息;
	echo xxxx
3. 如果没有任何参数,将显示当前回显设置;

echo off
echo
echo xxx
@echo xxx
echo on
echo
echo xxx
@echo xxx

在这里插入图片描述

  1. 注释(不执行语句):
1. rem:在echo on状态下仍然会打印出来;
2. @rem:在echo on/off状态下都不会打印出来;
3. :: :等同于@rem;
4. @goto tag
	...xxxx...
	:tag 
	///// 
	goto 跳转到标签指定的位置并从标签的下一行命令开始执行
	:xxx 标签[标签名 xxx]

echo
rem 11111
:: 22222
@rem 33333
@goto tag
44444
55555
66666
:tag
rem 00000

在这里插入图片描述

  1. call: (在.bat 中调用另一个 .bat)
1. 用于在一个批处理程序中调用另一个批处理程序;
2. 此调用过程中只是暂时挂起父批处理程序,当子批处理程序运行完毕后会返回父批处理程序继续执行;

call [Drive:][Path] FileName
# filename 参数必须具有 .bat 或 .cmd 扩展名;
# 与父批处理程序在同一目录下可直接使用文件名;
  1. 开启关闭外部程序: ( .exe)

    # 所有的DOS命令和命令行程序都可以由start命令来调用, 绝对路径;
    start D:\..\xx.exe
    
    # 结束进程xxx.exe: 在任务管理器详细信息进程名称;
    taskkill /f /im xxx.exe
    
  2. 变量使用:

    # 申明变量
    %var
    
    # 条件 if / if not
    # 如果等于指定的字符串,则条件成立;
    if "%var"=="xxx" 
    	# do something
    
    # 如果有指定的文件[filename],则条件成立;
    if exist filename
    	# do something
    
    # 如果返回码等于指定的数字[NUMBER],则条件成立;
    if errorlevel number
    	# do something
    
    # 循环
    for {%var|%%var} in (set) do command [ CommandLineOptions]
    
三:案例
  1. 获取本地ip v4, mac:

    @echo off
    @for /f "tokens=16" %%i in ('ipconfig ^|find /i "ipv4"') do (
    @set myip=%%i
    @goto out
    )
    
    :out
    @echo local ip == %myip%
    
    @rem ==========
    @rem 获取mac地址
    for /f %%i in ('getmac /nh ^| findstr "..-..-..-..-..-.."') do (
    	@echo %%i
    )
    
  2. 运行jar:

    #编译.java
    javac xx.java
    
    #运行.class:(不需要后缀)
    @echo off
    start javaw xx
    
    运行jar:
    @echo off
    1. start -jar xxx.jar
    @rem 无对话框
    2. start javaw -jar xxx.jar
    
  3. 管理入、出站规则:

    # 重复调用add会多次创建
    netsh advfirewall firewall delete rule name="minio"
    netsh advfirewall firewall add rule name="minio" dir=in protocol=tcp action=allow localport=9990-9991
    
  4. 注册系统环境变量:

    @rem 注册 CATALINA_HOME(tomcat)
    @if {%CATALINA_HOME%}=="" (
    @set CATALINA_HOME=D:\Harine\tomcat
    @set RegV=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
    reg add "%RegV%" /v "CATALINA_HOME" /d "%CATALINA_HOME%" /f
    
    @rem ===============================================================================
    @set JAVA_HOME=D:\Harine\java\jdk1.8
    @set CATALINA_HOME=D:\Harine\tomcat
    @set CLASSPATH=.;%%JAVA_HOME%%\lib;%%JAVA_HOME%%\lib\tools.jar
    @set PATH=%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin;%PATH%
    
    @rem ----使用新的注册方式,可立即生效:win7 以后-----
    @setx "JAVA_HOME" "%JAVA_HOME%" -M
    @setx "CATALINA_HOME" "%CATALINA_HOME%" -M
    @setx "CLASSPATH" "%CLASSPATH%" -M
    @setx "Path" "%PATH%" -M
    
  5. 以管理员身份运行:

    @rem 1. 在该bat文件开头添加某些代码,实现该bat文件默认以管理员权限运行
    @echo off&color 17
    if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
    bcdedit >nul
    
    if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
    :UACPrompt
    %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
    
    exit /B
    :UACAdmin
    cd /d "%~dp0"
    echo 当前运行路径是:%CD%
    echo 已获取管理员权限
    
    @rem 3. bat脚本获取管理员权限;
    @echo off
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    cd /d "%~dp0"
    
    @rem 4. bat脚本中以管理员权限执行命令;
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
    
  6. 读取文件内容:

    @if not exist licence.lc goto error
    @rem 读取文件内容,每行
    for /f %%i in ('type licence.lc') do (
    	@echo %%i
    )
    
    :error
    
四:问题
  1. 为什么.bat文件运行闪一下就没了?

    原因:运行结束了,但你没有告诉它运行完要保持cmd打开状态;
    解决方法:
    1. 结尾加一个 pause;(会在运行结束之后提示按任意键继续)
    2. 结尾写上 cmd /k;
    
<think>好的,用户想了解BAT文件的常用指令及用法。首先,我需要回忆一下BAT脚本的基础知识。BAT文件是Windows下的批处理脚本,通过命令行执行一系列任务。用户提供的参考资料里提到了几个关键命令,比如`type`、`ren`,还有一些编码注意事项。 首先,我应该整理常用的BAT命令,比如`echo`、`@`、`rem`、`set`、`if`、`for`等。这些是基础中的基础,用户可能需要的例子,比如关闭回显、注释、变量设置、条件判断和循环。然后,用户提到的`ren`命令用于重命名,需要详细说明用法,并给出示例,像如何重命名单个文件、批量修改扩展名等。 接着,用户提供的引用中有提到文件操作命令,比如`copy`、`del`、`move`,这些也需要涵盖。另外,`type`命令显示文件内容,但用户可能还需要知道如何创建文件,比如使用`echo`重定向或者`copy con`命令。 编码问题也很重要,用户引用里提到ANSI编码避免中文乱码,这一点必须强调,因为很多新手会遇到这个问题。可能还需要提醒用户编辑器的选择,比如用记事本保存时选择ANSI。 然后,用户可能对流程控制感兴趣,比如`goto`和`call`,这些在编写复杂脚本时很有用。示例部分需要简单明了,比如用`goto`实现菜单选择,或者用`call`调用其他批处理文件。 错误处理方面,`errorlevel`的使用可以帮助用户判断上一条命令的执行结果,比如是否成功,这在自动化脚本中很重要,应该包含一个例子说明如何检查错误。 最后,注意事项部分要包括编码、权限、路径空格处理,这些是常见问题,用户可能遇到但不容易察觉的地方。 生成相关问题的时候,要考虑用户可能的后续需求,比如如何注释、处理变量、调试脚本、定时任务以及错误处理技巧。这些问题能帮助用户深入学习和解决问题。 整体结构需要清晰,分点列出常用命令,每个命令带示例,然后注意事项和相关问题。确保使用中文,符合用户要求,并且引用标记正确,参考提供的引用内容。同时,检查LaTeX格式是否正确,不过BAT内容可能不需要数学公式,但如果有变量或代码中的符号,确保正确使用格式。</think>### BAT文件常用指令及用法详解 BAT文件是Windows系统的批处理脚本,通过命令行指令实现自动化操作。以下是常用命令及用法说明: --- #### 一、基础命令 1. **`echo`**:显示信息或控制命令回显 ```bat @echo off :: 关闭命令回显(常用在脚本开头) echo Hello World :: 输出文本 ``` 2. **`@`**:隐藏当前命令的回显 ```bat @echo 本条命令不会显示自身 ``` 3. **`rem`** 或 **`::`**:添加注释 ```bat rem 这是注释内容 :: 另一种注释方式(非正式语法但通用) ``` 4. **`set`**:定义变量或环境变量 ```bat set name=John :: 定义变量 echo %name% :: 输出变量值 ``` --- #### 二、文件操作命令 1. **`ren`**:重命名文件文件夹 ```bat ren old.txt new.txt :: 重命名单个文件[^3] ren *.txt *.bat :: 批量修改扩展名 ren d:\test\1??.bat ???.txt :: 匹配特定文件名格式 ``` 2. **`copy`**:复制文件 ```bat copy file1.txt file2.txt :: 复制并重命名 copy *.txt backup\ :: 复制所有txt文件到backup目录 ``` 3. **`del`**:删除文件 ```bat del file.txt :: 删除单个文件 del /Q *.tmp :: 静默删除所有tmp文件(无需确认) ``` 4. **`type`**:显示文件内容 ```bat type log.txt :: 输出文件内容到控制台[^2] ``` --- #### 三、流程控制 1. **`if`**:条件判断 ```bat if exist file.txt ( echo 文件存在 ) else ( echo 文件不存在 ) ``` 2. **`for`**:循环操作 ```bat for %%i in (*.txt) do echo %%i :: 遍历当前目录所有txt文件 ``` 3. **`goto`**:跳转到标签 ```bat :start echo 循环中... goto start :: 无限循环 ``` --- #### 四、其他实用命令 1. **`call`**:调用另一个批处理文件 ```bat call sub_script.bat :: 执行子脚本并返回 ``` 2. **`pause`**:暂停脚本执行 ```bat pause :: 显示“请按任意键继续...” ``` 3. **`errorlevel`**:检查上一条命令的返回值 ```bat some_command.exe if %errorlevel% neq 0 ( echo 命令执行失败 ) ``` --- #### 注意事项 1. **编码问题**:BAT文件需保存为**ANSI编码**,否则中文会乱码[^1]。 2. **权限要求**:涉及系统目录的操作可能需要管理员权限。 3. **路径空格处理**:路径含空格时需用引号包裹,例如:`"C:\Program Files\"`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值