教你编写bat脚本Windows批处理

2023-12-05 0 804
目录
  • 常见用途
  • bat命令速查
    • 常用参数
  • echo
    • 注释
      • Rem
      • 使用::声明
    • dir :获取目录内容
      • > :将输出重定向到文件
        • 变量
          • 命令行参数
          • set命令
            • 字符串
            • 数值
        • 局部变量 vs 全局变量
          • 环境变量输出
            • 字符串
              • 创建
                • 空字符串
                  • 字符串拼接
                    • 字符串长度
                      • 转int
                        • 截取
                          • 右对齐
                            • 删除字符串
                              • 删除两端(保留中间)
                                • 删除空格:=
                                  • 替换
                                  • 数组
                                    • 创建
                                      • 访问
                                        • 修改
                                          • 迭代
                                            • 数组长度
                                              • 结构体
                                              • if语句
                                                • if defined :变量是否存在
                                                  • if exists:文件是否存在
                                                    • if errorlevel:测试运行的最后一个命令的退出代码
                                                    • for语句
                                                      • /d
                                                        • /r
                                                          • /l
                                                            • /f
                                                            • goto语句
                                                              • 运算符
                                                                • 关系运算符
                                                                • 系统日期
                                                                  • 日期格式化
                                                                  • 系统时间
                                                                    • 输入输出
                                                                      • 重定向
                                                                      • 函数
                                                                        • 调用 call :function_name
                                                                        • 进程
                                                                          • 查看进程列表TASKLIST
                                                                            • 终止进程
                                                                              • 启动进程
                                                                              • 别名
                                                                                • doskey 别名管理
                                                                                  • 创建
                                                                                  • 删除
                                                                              • 管道(|)

                                                                                批处理脚本文件具有特殊的扩展名BAT或CMD,这种类型的文件通过称为**命令解释器(cmd.exe)**的系统文件提供的接口(shell)来识别和执行。

                                                                                常见用途

                                                                                • 为不同的目的设置服务器
                                                                                • 自动管理活动和日志,如删除不需要的文件或日志文件
                                                                                • 自动将应用程序从一个环境部署到另一个环境。
                                                                                • 立即在各种机器上安装程序。

                                                                                bat命令速查

                                                                                命令备注VER显示正在使用的MS-DOS的版本ASSOC这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联cd更改不同的目录,或显示当前目录CLS清屏COPY文件复制DEL删除文件DIR列出目录内容DATE系统日期ECHO显示消息,或打开、关闭命令回显EXIT退出DOS控制台MD创建目录MOVE移动文件或目录PATH显示或设置路径变量PAUSE等待输入PROMPT用于更改或重置cmd.exe提示符RD删除目录(需为空)REN重命名文件和目录REM注释START在新窗口中启动程序,或打开文档TIME设置或显示时间TYPE将文件或文件的内容打印到输出中VOL显示卷标ATTRIB显示或设置当前目录中的文件的属性CHKDSK检查磁盘是否有问题CHOICE为用户提供了一个选项列表CMD调用另一个命令提示符实例COMP根据文件大小比较2个文件CONVERT将卷从FAT16或FAT32文件系统转换为NTFS文件系统DRIVERQUERY显示所有已安装的设备驱动程序及其属性EXPAND从压缩的.cab压缩文件中提取文件FIND在文件或输入中搜索字符串,输出匹配的行FORMAT将磁盘格式化为使用Windows支持的文件系统(如FAT,FAT32或NTFS),从而覆盖磁盘的先前内容HELP显示Windows提供的命令的列表IPCONFIG显示Windows IP配置。显示连接的配置和连接的名称LABEL添加,设置或删除磁盘标签MORE一次显示一个或多个文件的内容NET根据使用的命令提供各种网络服务PING通过网络将ICMP/IP “回显”发送到指定的地址的包SHUTDOWN关闭计算机,或者注销当前用户SORT从源文件获取输入,并按字母顺序排序其内容,从A到Z或从Z到A。它将在控制台上打印输出SUBST将驱动器号分配给本地文件夹,显示当前分配或删除分配SYSTEMINFO该批处理命令显示计算机及其操作系统的配置TASKKILL该批处理命令结束一个或多个任务TASKLIST列出任务,包括任务名称和进程标识(PID)XCOPY以更高级的方式复制文件和目录TREE将当前目录的所有子目录的树显示为递归或深度的任何级别FC列出两个文件之间的实际差异DISKPART显示和配置磁盘分区的属性TITLE该批处理命令设置控制台窗口中显示的标题SET显示当前系统上的环境变量列表

                                                                                常用参数

                                                                                /L: for循环移动范围的/L参数用于迭代数组。/A:数值

                                                                                echo

                                                                                @echo off

                                                                                • “echo off” :关闭脚本的显示(不显示命令)。
                                                                                • “@” :使命令也适用于自己。

                                                                                注释

                                                                                Rem

                                                                                Rem Remarks

                                                                                程序执行时忽略Rem关键字之后的任何内容。

                                                                                使用::声明

                                                                                :: Remarks

                                                                                dir :获取目录内容

                                                                                > :将输出重定向到文件

                                                                                @echo off
                                                                                Rem This is for listing down all the files in the directory Program files
                                                                                dir \”C:\\Program Files\” > C:\\lists.txt
                                                                                echo \”The program has completed\”

                                                                                变量

                                                                                命令行参数

                                                                                rem Test.bat
                                                                                @echo off
                                                                                echo %1
                                                                                echo %2
                                                                                echo %3

                                                                                运行方式

                                                                                Test.bat 1 2 3

                                                                                set命令

                                                                                set /A variable-name=value

                                                                                • variable-name: 变量的名称
                                                                                • value:变量值。
                                                                                • /A:如果该值本质上是数值,则使用此开关。

                                                                                字符串

                                                                                @echo off
                                                                                set message=Hello World
                                                                                echo %message%
                                                                                rem 变量需要包含在%符号中显示

                                                                                数值

                                                                                @echo off
                                                                                SET /A a=5
                                                                                SET /A b=10
                                                                                SET /A c=%a% + %b%
                                                                                echo %c%

                                                                                局部变量 vs 全局变量

                                                                                • 默认情况下为全局变量。
                                                                                • 调用SETLOCAL命令,使变量局部在脚本的范围内。
                                                                                • 在调用SETLOCAL之后,任何变量赋值在调用ENDLOCAL,调用EXIT,或者当执行到达脚本中的文件结尾(EOF)时都会返回。

                                                                                @echo off
                                                                                set globalvar=5
                                                                                SETLOCAL
                                                                                set var=13145
                                                                                set /A var=%var% + 5
                                                                                echo %var%
                                                                                echo %globalvar%
                                                                                ENDLOCAL

                                                                                环境变量输出

                                                                                @echo off
                                                                                echo %JAVA_HOME%

                                                                                字符串

                                                                                创建

                                                                                set message=Hello World

                                                                                空字符串

                                                                                SET a=
                                                                                if [%a%]==[] echo \”String A is empty\”

                                                                                要检查是否存在空字符串,需要在方括号中包含变量名,并将其与方括号中的值进行比较。

                                                                                字符串拼接

                                                                                @echo off
                                                                                SET a=Hello
                                                                                SET b=World
                                                                                SET /A d=50
                                                                                SET c=%a% and %b% %d%
                                                                                echo %c%
                                                                                :: Hello and World 50

                                                                                字符串长度

                                                                                @echo off
                                                                                set str=Hello World
                                                                                call :strLen str strlen
                                                                                echo String is %strlen% characters long
                                                                                exit /b
                                                                                :strLen
                                                                                setlocal enabledelayedexpansion
                                                                                :strLen_Loop
                                                                                if not \”!%1:~%len%!\”==\”\” set /A len+=1 & goto :strLen_Loop
                                                                                (endlocal & set %2=%len%)
                                                                                goto :eof

                                                                                转int

                                                                                使用set变量设置为字符串的变量后,可以使用set变量的**/A开关转换为整数**。

                                                                                @echo off
                                                                                set var=13145
                                                                                set /A var=%var% + 5
                                                                                echo %var%

                                                                                截取

                                                                                %variable:~num_chars_to_skip%
                                                                                %variable:~num_chars_to_skip,num_chars_to_keep%

                                                                                输出:

                                                                                HelloworldHello

                                                                                ~0,5用于指定需要显示的字符

                                                                                右对齐

                                                                                @echo off
                                                                                set x=1000
                                                                                set y=1
                                                                                set y=%y%
                                                                                echo %x%

                                                                                set y=%y:~-4%
                                                                                echo %y%

                                                                                输出

                                                                                10001

                                                                                使用~-4选项来表示只想显示字符串y的最后4个字符。

                                                                                删除字符串

                                                                                @echo off
                                                                                set str=Batch scripts is easy. It is really easy.
                                                                                echo %str%
                                                                                :: 删除is
                                                                                set str=%str:is=%
                                                                                echo %str%
                                                                                :: Batch scripts easy. It really easy.

                                                                                删除两端(保留中间)

                                                                                @echo off
                                                                                set str=Batch scripts is easy. It is really easy
                                                                                echo %str%

                                                                                set str=%str:~1,-1%
                                                                                echo %str%
                                                                                :: atch scripts is easy. It is really eas

                                                                                删除空格:=

                                                                                @echo off
                                                                                set str=This string has a lot of spaces
                                                                                echo %str%

                                                                                set str=%str:=%
                                                                                echo %str%
                                                                                :: Thisstringhasalotofspaces

                                                                                替换

                                                                                @echo off
                                                                                set str=This message needs changed.
                                                                                echo %str%

                                                                                set str=%str:needs=has%
                                                                                echo %str%
                                                                                :: This message has changed.

                                                                                数组

                                                                                创建

                                                                                • 方法一:set

                                                                                set a[0]=1

                                                                                • 方法二:值列表遍历

                                                                                @echo off
                                                                                set list=1 2 3 4
                                                                                (for %%a in (%list%) do (
                                                                                echo %%a
                                                                                ))

                                                                                访问

                                                                                echo %a[0]%

                                                                                修改

                                                                                Set a[3]=4

                                                                                迭代

                                                                                @echo off
                                                                                setlocal enabledelayedexpansion
                                                                                set topic[0]=comments
                                                                                set topic[1]=variables
                                                                                set topic[2]=Arrays
                                                                                set topic[3]=Decision making
                                                                                set topic[4]=Time and date
                                                                                set topic[5]=Operators

                                                                                for /l %%n in (0,1,5) do (
                                                                                echo !topic[%%n]!
                                                                                )

                                                                                for循环移动范围的/L参数用于迭代数组。

                                                                                数组长度

                                                                                @echo off
                                                                                set Arr[0]=1
                                                                                set Arr[1]=2
                                                                                set Arr[2]=3
                                                                                set Arr[3]=4
                                                                                set \”x=0\”
                                                                                :SymLoop

                                                                                if defined Arr[%x%] (
                                                                                call echo %%Arr[%x%]%%
                                                                                set /a \”x+=1\”
                                                                                GOTO :SymLoop
                                                                                )
                                                                                echo \”The length of the array is\” %x%

                                                                                结构体

                                                                                @echo off
                                                                                set len=3
                                                                                set obj[0].Name=Joe
                                                                                set obj[0].ID=1
                                                                                set obj[1].Name=Mark
                                                                                set obj[1].ID=2
                                                                                set obj[2].Name=Mohan
                                                                                set obj[2].ID=3
                                                                                set i=0
                                                                                :loop
                                                                                if %i% equ %len% goto :eof
                                                                                set cur.Name=
                                                                                set cur.ID=
                                                                                for /f \”usebackq delims==.tokens=1-3\” %%j in (`set obj[%i%]`) do (
                                                                                set cur.%%k=%%l
                                                                                )
                                                                                echo Name=%cur.Name%
                                                                                echo Value=%cur.ID%
                                                                                set /a i=%i%+1
                                                                                goto loop

                                                                                if语句

                                                                                if %c%==15 (echo \”The value of variable c is 15\”) else (echo \”Unknown value\”)

                                                                                if defined :变量是否存在

                                                                                if defined str1 echo \”Variable str1 is defined\”

                                                                                if exists:文件是否存在

                                                                                if exist C:\\set3.txt (echo \”File exists\”) else (echo \”File does not exist\”)

                                                                                if errorlevel:测试运行的最后一个命令的退出代码

                                                                                if errorlevel n somecommand

                                                                                各种命令发出整数退出代码来表示命令的状态。 通常,如果命令成功完成,则命令通过传递0;如果命令失败,命令通过传递1。

                                                                                for语句

                                                                                • %variable 指定一个单一字母可替换的参数。注意:批处理脚本中使用%%variable
                                                                                • (set) 指定一个或一组文件。可以使用通配符。
                                                                                • command 指定对每个文件执行的命令。
                                                                                • command-parameters 为特定命令指定参数或命令行开关。

                                                                                /d

                                                                                /r

                                                                                /l

                                                                                /f

                                                                                goto语句

                                                                                @echo off
                                                                                SET /A a=5

                                                                                if %a%==5 goto :labela
                                                                                if %a%==10 goto :labelb
                                                                                :labela
                                                                                echo \”The value of a is 5\”
                                                                                exit /b 0
                                                                                :labelb
                                                                                echo \”The value of a is 10\”

                                                                                运算符

                                                                                关系运算符

                                                                                运算符备注EQU相等NEQ不等LSS左小于右LEQ小于等于GTR大于GEQ大于等于

                                                                                系统日期

                                                                                echo %DATE%

                                                                                日期格式化

                                                                                @echo off
                                                                                echo/Today is: %year%-%month%-%day%
                                                                                goto :EOF
                                                                                setlocal ENABLEEXTENSIONS
                                                                                set t=2&if \”%date%z\” LSS \”A\” set t=1

                                                                                for /f \”skip=1 tokens=2-4 delims=(-)\” %%a in (\’echo/^|date\’) do (
                                                                                for /f \”tokens=%t%-4 delims=.-/ \” %%d in (\’date/t\’) do (
                                                                                set %%a=%%d&set %%b=%%e&set %%c=%%f))
                                                                                endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

                                                                                系统时间

                                                                                echo %TIME%

                                                                                输入输出

                                                                                • 0:stdin 标准输入
                                                                                • 1:stdout 标准输出
                                                                                • 2:stderr 错误消息

                                                                                重定向

                                                                                DIR C:\\ > lists.txt 2> &1

                                                                                • 使用文件编号和"&"前缀来组合stdout和stderr流

                                                                                函数

                                                                                :function_name
                                                                                Do_something
                                                                                EXIT /B 0

                                                                                • function_name是赋予函数的名字,它应该与函数的实际功能相匹配。
                                                                                • EXIT语句用于确保函数正常退出.

                                                                                :Display
                                                                                SET /A index=2
                                                                                echo The value of index is %index%
                                                                                EXIT /B 0

                                                                                调用 call :function_name

                                                                                @echo off
                                                                                Rem main
                                                                                SETLOCAL
                                                                                CALL :Display 5 , 10
                                                                                EXIT /B %ERRORLEVEL%
                                                                                Rem function
                                                                                :Display
                                                                                echo The value of parameter 1 is %~1
                                                                                echo The value of parameter 2 is %~2
                                                                                EXIT /B 0

                                                                                • 确保在主程序中放入EXIT / B%ERRORLEVEL%语句,以便将主程序的代码与函数分开。
                                                                                • 使用~1来访问发送给函数的第一个参数,同样使用~2来访问第二个参数。

                                                                                进程

                                                                                查看进程列表TASKLIST

                                                                                :: 获取内存大于40MB的进程
                                                                                tasklist /fi \”memusage gt 40000\”

                                                                                /S system指定要连接的远程系统/U [domain]user指定命令应在其下执行的用户上下文/P [password]指定给定用户上下文的密码。 提示输入,如果省略。/M [module]列出当前使用给定的exe / dll名称的所有任务。 如果未指定模块名称,则显示所有已加载的模块。/SVC显示每个进程中托管的服务。/V显示详细的任务信息。/FI filter显示一组符合过滤器指定条件的任务。/FO format指定输出格式。 有效值:TABLE,LIST,CSV。/NH指定“列标题”不应显示在输出中。 仅适用于TABLE和CSV格式。

                                                                                :: 获取内存大于40MB的进程
                                                                                tasklist /fi \”memusage gt 40000\”

                                                                                终止进程

                                                                                START \”title\” [/D path] [options] \”command\” [parameters]

                                                                                /S system指定要连接的远程系统/U [domain]user指定命令应在其下执行的用户上下文。/P [password]指定给定用户上下文的密码。 提示输入,如果省略。/FI FilterName应用过滤器来选择一组任务,允许使用*通配符。/PID processID指定要终止的进程的PID。使用TaskList来获取PID。/IM ImageName指定要终止的进程的映像名称。 通配符*可用于指定所有任务或图像名称。/T终止指定的进程以及由其启动的任何子进程。/F指定强制终止进程。

                                                                                :: 杀死(终止)打开的记事本任务
                                                                                taskkill /f /im notepad.exe
                                                                                :: 杀死了一个ID为9901的进程
                                                                                taskill /pid 9901

                                                                                启动进程

                                                                                START \”title\” [/D path] [options] \”command\” [parameters]

                                                                                titleCMD窗口标题栏的文本(必需)path起始目录。command命令,批处理文件或可执行程序运行。parameters传递给命令的参数

                                                                                options:

                                                                                /MIN启动窗口最小化。/MAX启动窗口最大化。/LOW使用IDLE优先级。/NORMAL使用NORMAL优先级。/ABOVENORMAL使用ABOVENORMAL优先级。/BELOWNORMAL使用BELOWNORMAL优先级。/HIGH使用HIGH优先级。/REALTIME使用REALTIME优先级。

                                                                                :: 在新窗口中运行批处理脚本test.bat。 窗口将以最小化模式启动,并且指定标题为:“Test Batch Script”。
                                                                                START \”Test Batch Script\” /Min test.bat
                                                                                :: 在另一个进程中运行Microsoft Word,然后在MS Word中打开文件TESTA.txt
                                                                                START \”\” \”C:\\Program Files\\Microsoft Office\\Winword.exe\” \”D:\\test\\TESTA.txt\”

                                                                                别名

                                                                                dw=dir /w

                                                                                当要执行dir /w命令时,可以简单地键入dw这个单词。dw这个词现在已经成为命令dir /w的别名。

                                                                                doskey 别名管理

                                                                                DOSKEY [options] [macroname=[text]]

                                                                                创建

                                                                                @echo off
                                                                                doskey cd=cd/test
                                                                                doskey d=dir

                                                                                删除

                                                                                @echo off
                                                                                doskey cd=cd/test
                                                                                doskey d=dir
                                                                                d=

                                                                                将d的值设置为NULL,所以宏d将被删除。

                                                                                管道(|)

                                                                                管道运算符(|)将一个命令的输出(默认为STDOUT)引导到另一个命令的输入(默认为STDIN)。

                                                                                :: 两个命令同时启动,但是sort命令暂停,直到它接收到dir命令的输出。
                                                                                :: sort命令使用dir命令的输出作为输入,然后将其输出发送到句柄1(即STDOUT)。
                                                                                dir C:\\ | sort

                                                                                到此这篇关于教你编写bat脚本Windows批处理的文章就介绍到这了,更多相关bat脚本Windows批处理内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

                                                                                您可能感兴趣的文章:

                                                                                • BAT 批处理脚本教程(详细篇悠久资源网补充)
                                                                                • Windows下bat批处理脚本使用telnet批量检测远程端口小记
                                                                                • bat批处理脚本中文乱码的解决
                                                                                • BAT批处理、VBScript批量安装字体脚本分享
                                                                                • 常用的bat批处理脚本大全(精选)

                                                                                收藏 (0) 打赏

                                                                                感谢您的支持,我会继续努力的!

                                                                                打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
                                                                                点赞 (0)

                                                                                悠久资源 DOS/BAT 教你编写bat脚本Windows批处理 https://www.u-9.cn/jiaoben/dosbat/99917.html

                                                                                常见问题

                                                                                相关文章

                                                                                发表评论
                                                                                暂无评论
                                                                                官方客服团队

                                                                                为您解决烦忧 - 24小时在线 专业服务