zoukankan      html  css  js  c++  java
  • 批处理(.bat文件)的使用

    bat,即批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。

    基本知识

      @echo off表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显。而echo off命令则表示关闭其他所有命令(不包括本身这条命令)的回显,@的作用就是关闭紧跟其后的一条命令的回显。

    获取当前目录:

    方法1:命令   %cd%  或者  !cd!  ,取得是运行的环境目录
    方法2:命令  %~dp0   ,取得了bat的文件所在目录

    @echo off
    echo 当前盘符:%~d0
    echo 当前盘符和路径:%~dp0
    echo 当前盘符和路径的短文件名格式:%~sdp0
    echo 当前批处理全路径:%~f0
    echo 当前CMD默认目录:%cd%
    pause

    copy命令

    将一份或多份文件复制到另一个位置。

    COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
    [+ source [/A | /B] [+ …]] [destination [/A | /B]]

    变量说明
    source 指定要复制的文件。
    /A 表示一个 ASCII 文本文件。
    /B 表示一个二进位文件。
    /D 允许解密要创建的目标文件
    destination 为新文件指定目录和/或文件名。
    /V 验证新文件写入是否正确。
    /N 复制带有非 8dot3 名称的文件时,尽可能使用短文件名。
    /Y 不使用确认是否要覆盖现有目标文件的提示。
    /-Y 使用确认是否要覆盖现有目标文件的提示。
    /Z 用可重新启动模式复制已联网的文件。
    /L 如果源是符号链接,请将链接复制到目标而不是源链接指向的实际文件。

    例如:

    @echo off
    REM 使用copy命令,写路径时,不要使用/
    
    REM 拷贝一个文件到指定的目录(/y :有重名文件不提示直接覆盖 /-y :提示是否覆盖  默认是/y)
    REM copy /-y d:mylog.log e: 
    
    REM 拷贝一个文件到指定的目录并重新命名
    REM copy d:mylog.log d:mylog2.log
    
    REM 拷贝许多文件到指定的目录(指定的目录必须存在)
    REM copy d:*.sql e:123
    
    REM 拷贝源目录下的所有文件到另一个目录
    REM copy e:123 e:1234
    
    REM 合并多个文件
    REM copy /b e:1231.txt + e:1232.txt  e:1233.txt
    

    xcopy (外部命令)文件拷贝

    复制文件和目录树。

    XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
    [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
    [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
    [/EXCLUDE:file1[+file2][+file3]…]

    变量说明
    source 指定要复制的文件
    destination 指定新文件的位置和/或名称。
    /A 仅复制有存档属性集的文件,但不更改属性。
    /M 仅复制有存档属性集的文件,并关闭存档属性。
    /D:m-d-y 复制在指定日期或指定日期以后更改的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。
    /EXCLUDE:file1[+file2][+file3]… 指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制该文件。例如,指定如 obj 或 .obj 的字符串会分别 排除目录 obj 下面的所有文件或带有.obj 扩展名的所有文件。
    /P 创建每个目标文件之前提示你。
    /S 复制目录和子目录,不包括空目录。
    /E 复制目录和子目录,包括空目录
    /V 验证每个新文件的大小。
    /W 提示你在复制前按键。
    /C 即使有错误,也继续复制。
    /I 如果目标不存在,且要复制多个文件,则假定目标必须是目录。
    /Q 复制时不显示文件名。
    /F 复制时显示完整的源文件名和目标文件名。
    /L 显示要复制的文件。
    /G 允许将加密文件复制到 不支持加密的目标。
    /H 也复制隐藏文件和系统文件。
    /R 覆盖只读文件。
    /T 创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括空目录和子目录。
    /U 只复制已经存在于目标中的文件。
    /K 复制属性。一般的 Xcopy 会重置只读属性。
    /N 用生成的短名称复制。
    /O 复制文件所有权和 ACL 信息。
    /X 复制文件审核设置(隐含 /O)。
    /Y 取消提示以确认要覆盖现有目标文件。
    /-Y 要提示以确认要覆盖现有目标文件。
    /Z 在可重新启动模式下复制网络文件。
    /B 复制符号链接本身与链接目标。
    /J 复制时不使用缓冲的 I/O。推荐复制大文件时使用。

    开关 /Y 可以预先在 COPYCMD 环境变量中设置。

    例如:

    REM 复制源目录下的所有文件并子文件夹到指定目录(若指定的目录不存在则会新建)(注意:e:123后不要加)
    xcopy e:123 e:1234456 /s /e /i /y
    

    del命令

    删除一个或数个文件。

    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

    标识说明
    name 指定一个或多个文件或者目录列表。通配符可用来删除多个文件。如果指定了一个目录,该目录中的所有文件都会被删除。
    - 表示“否”的前缀
    /P 删除每一个文件之前提示确认。
    /F 强制删除只读文件。
    /S 删除所有子目录中的指定的文件。
    /Q 安静模式。删除全局通配符时,不要求确认
    /A 根据属性选择要删除的文件
    属性 R 只读文件     S 系统文件
    H 隐藏文件     A 存档文件
    I 无内容索引文件   L 重分析点
    - 表示“否”的前缀

    如果命令扩展被启用,DEL 和 ERASE 更改如下:

    /S 开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。

    rd/?

    删除一个目录。

    RMDIR [/S] [/Q] [drive:]path
    RD [/S] [/Q] [drive:]path

    开关作用
    /S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
    /Q 安静模式,带 /S 删除目录树时不要求确认

    例如:

    REM 删除指定目录下的所有文件(不删除子文件夹下的文件)
    REM DEL /Q E:1234456 
    
    REM 删除指定目录下的所有文件(会删除子文件夹下的文件,但会保留子文件夹)
    REM DEL /S /Q E:1234456 
    
    REM 删除指定目录下的所有,并自身目录
    REM RD /S /Q E:1234456 
    

    常用例子

    以“管理员权限”打开

    @echo off
    mode con lines=30 cols=60
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    cd /d "%~dp0"
    rem 下面可以写你的bat代码了

    @echo off
    :: BatchGotAdmin
    :-------------------------------------
    REM --> Check for permissions
    >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
    "%temp%getadmin.vbs"
    View Code

    切换cmd的字符集

    //设置cmd的字符集为 UTF-8  (将下面两行写到一个 .bat文件中,双击即可)
    chcp 65001
    cmd
    
    //设置cmd的字符集为 GBK  (将下面两行写到一个 .bat文件中,双击即可)
    chcp 936
    cmd

    判断32位还是64位系统

    @echo off 
    setlocal EnableDelayedExpansion
    
    if "%PROCESSOR_ARCHITECTURE%" == "X86" (
     echo 32位系统
    )^
    else if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
     echo 64位系统
    )^
    else (
     echo 其他系统
    )
    pause

    ***************

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    Spring Cloud Eureka(七):DiscoveryClient 源码分析
    Spring Cloud Eureka(六):Eureka Client 如何注册到Eureka Server
    Centos 查看CPU个数、核心数等信息
    Spring Cloud Eureka(五):Eureka Server 启动流程分析
    GlusterFS常用命令
    修改内核参数ip_local_reserved_ports避免tomcat端口占用
    TTM模块安装
    查看磁盘raid信息
    Kubernetes中的PodIP、ClusterIP和外部IP
    ubuntu 14.04.5 kern numa bug
  • 原文地址:https://www.cnblogs.com/htj10/p/14175745.html
Copyright © 2011-2022 走看看