Bat 指令

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

Bat 指令_第1张图片

  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

Bat 指令_第2张图片

  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;
    

你可能感兴趣的:(指令,Bat,服务器,linux,网络)