常用bat脚本命令

前言:
window 批处理脚本通常都是 .bat  或 .cmd 后缀。

区别:

   本质上没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的。
   只是 cmd 文件中允许使用的命令要比 bat 文件多。
   一个使用 cmd 运行的, 一个用 dos 解释器解释运行。
   cmd 文件只有在 windows2000 以上的系统中才能运行,而 bat 文件则没有这个限制。
   cmd 文件的描述是 windows nt 命令脚本, bat 文件的描述是 ms dos 批处理文件。
注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码)

使用记事本打开以后另存为可以更改一下编码的格式,更改为 ANSI 编码格式,这样打开以后命令行中不会显示中文乱码。
常用bat脚本命令_第1张图片

常用命令:
1、语句注释
rem 命令行注释,可以回显(语句会在命令行中显示)。
:: 两个冒号,效果同上,但不会回显。(冒号后加任意非字母数字字符都可起到注释作用)。
2、暂停
pause 暂停,命令行中出现"请按任意键继续…"。

::pause>nul,隐藏原暂停文本
echo 这里是自定义文本! & pause > nul

3、输出和换行
echo 后加内容即输出该内容,如 echo 网页浏览量刷新完毕。
echo.换行命令,即echo后加一个点。
4、开启关闭回显
@ 置于语句前则该条语句不会回显,无视 echo on 。
echo off 关闭回显功能,直到出现 echo on,但其本身会回显,故其之前往往和@一起使用,即 @echo off 关闭所有回显功能。
5、新建文件、增加文件内容

@echo off
rem 格式:echo 文件内容>文件路径
echo @echo off>test1.bat
::其中>>在文末添加,>覆盖原内容
echo echo this is test>>test1.bat
echo pause>>test1.bat
rem 显示该文件内容
type test1.bat
pause

常用bat脚本命令_第2张图片
常用bat脚本命令_第3张图片6、设置标题 title 、查看返回码 errorlevel

    @echo off
    ::title设置标题
    title 测试test2.bat
    ::用以判断上一条命令是否执行成功,默认为0,出错为1
    echo %errorlevel%
    pause

在这里插入图片描述
7、设置颜色
常用的颜色有以下值:
0 黑色,1蓝色,2 绿色,3 浅绿色,4红色,5紫色,6黄色,7白色,8灰色,9浅蓝。
A浅绿,B浅蓝色,C浅红色,D浅紫色,E浅黄色,F亮白色。
例:color 0A

@echo off
::title设置标题
title 测试一下命令行的背景颜色
echo 天若有情天亦老
color 0E
pause

常用bat脚本命令_第4张图片
8、if语句

注意:if 语句块在执行时是当做一条语句加载的,故需要通过中的延迟赋值来解决其内部变量引用的问题。
下边展示几个例子:

    ::if常规用法,注意空格
    @echo off
    :start
    set /p a=
    if not %a%==1 (
    	echo input 1
    	goto start
    ) else (
    	echo success
    )
    pause>nul
    @echo off
    if not exist C:\Users\admin\Desktop\testbat\test5.bat (
    	echo @echo off>C:\Users\admin\Desktop\testbat\test5.bat
    ) else (
    	del C:\Users\admin\Desktop\testbat\test5.bat
    )
    pause>nul
    @echo off
    set a=1
    if defined a (
    	echo 已定义a
    ) else (
    	echo 未定义a
    )
    pause

常用bat脚本命令_第5张图片

    @echo off
    set a=123
    set b=abc
    set c=12
    ::/i字符串大小写忽略
    if /i %b% equ ABC (
      if %a% geq %c% (
        echo %a%^>=%c%
      ) else (
        echo %a%^<%c%
      )
    ) else (
      echo %b%不等于ABC
    )
    pause

常用bat脚本命令_第6张图片
如上的操作数可以是字符串、数值、变量;当参与比较的字符串是字符串时,将被转换为对于的 ASCII 码进行比较;比较运算符有如下:
常用bat脚本命令_第7张图片
9、goto语句
goto start 重新开始

    @echo off
    ::使用冒号加标记名作为goto语句的标记
    :start
    set /p param=
    echo %param%
    if %param%==4 echo 请不要输入4& goto start
    pause

常用bat脚本命令_第8张图片
10、set 用法之接收用户输入数据

@echo off
set /p param=请输入密码:
echo %param%
pause

常用bat脚本命令_第9张图片
11、set用法之定义变量和延迟赋值

::输出为1
@echo off
set a=1
set a=2&echo %a%
pause

在这里插入图片描述
注意:批处理在运行 “set a=2&echo %a%” 之前,会先把这一句整句读取并做了预处理,即对变量a赋了值,那么 %a% 值为 4,为解决该问题,批处理设计了变量延迟。也就是说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,具体实现如下:

::输出为2
@echo off&setlocal enabledelayedexpansion
set a=1
set a=2&echo !a!
pause

在这里插入图片描述
12、set 用法之系统变量

@echo off
::查看所有环境变量
set
::查看环境变量JAVA_HOME的值
if defined JAVA_HOME echo %JAVA_HOME%
pause

常用bat脚本命令_第10张图片
13、set 用法之定义数字表达式

@echo off
set a=1&set b=6
set c=%a%+%b%
::输出1+6
echo %c%
set d=a+b
::输出a+b
echo %d%
set /a e=a+b
::输出7
echo %e%
pause

常用bat脚本命令_第11张图片
14、for 语句

@echo off
::关键字for、in、do必有,括号必有
::分隔符可以是逗号、分号、等号、空格
::输出为A换行1换行B。。。
for %%i in (A,B,C) do echo %%i & echo 1
pause

常用bat脚本命令_第12张图片

@echo off
::找出D盘下所有文件
for %%i in (C:\Users\admin\Desktop\testbat\*.*) do echo "%%i"
pause

常用bat脚本命令_第13张图片

@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前硬盘的分区有:
for %%i in (%str%) do if exist %%i: echo %%i:
pause

常用bat脚本命令_第14张图片
15、变量%0–%9
%0 指该文件本身,%1–%9 为接收到的参数,如下例子中子程序的 %1 即为主程序传输的 param1,%2 即为 param2

    ::该文件名为test.bat
    @echo off
    echo 这是主程序第一个输出
    timeout 2
    start test1.bat param1 param2
    timeout 2
    echo 这是主程序第二个输出
    pause
::该文件名为test1.bat
@echo off
timeout 2
echo 这是子程序第一个输出
echo 这是接收到的第一个参数%1 和第二个参数%2
pause

16、切换目录

::@echo off
::显示当前目录
cd
::切换到根目录
cd\
::盘符加冒号,切换到该盘
d:
::切换到e:hi目录下(目录名不区分大小写)
cd /d e:\hi
::保存当前目录,并切换当前目录为d:\test
pushd d:\test
::恢复当前目录为刚才保存的e:\hi
popd
pause

常用bat脚本命令_第15张图片
17、md 命令创建文件夹

::创建文件夹
md C:\Users\admin\Desktop\testbat\test111
::文件夹名有空格需要加引号
md "C:\Users\admin\Desktop\testbat\test op444"
::空格隔开,创建多个
md C:\Users\admin\Desktop\testbat\test1 C:\Users\admin\Desktop\testbat\test9\test2 "C:\Users\admin\Desktop\testbat\test5 lmn"
pause

常用bat脚本命令_第16张图片
18、rd 命令删除文件夹

@echo off
::删除C:\Users\admin\Desktop\testbat\test空文件夹,不为空不能删除
rd "C:\Users\admin\Desktop\testbat\test op"
::删除C:\Users\admin\Desktop\testbat\test下所有文件夹,不管是否为空,但会询问是否确认删除[Y/N]
rd /s C:\Users\admin\Desktop\testbat\test
::自定义删除提示信息
echo 是否删除[Y/N]: & rd /s C:\Users\admin\Desktop\testbat\test>nul
::/s/q联合使用,不会询问直接删除
rd /s/q C:\Users\admin\Desktop\testbat\test

19、move 命令移动文件(夹)

@echo off
::文件夹移动,如果test文件夹存在,则将test5文件夹移动到test文件夹下
::如果test文件夹不存在,则将test5文件夹移动到test1文件夹下并重命名为test
::注意:文件夹移动不能跨分区
move e:\test5 e:\test1\test
::将d:\test\1.txt文件移动到e:\下并重命名为23.txt
::如果该目录已存在23.txt,则会覆盖
move d:\test\1.txt e:\23.txt>nul&&echo 移动成功并重命名
::将e:\23.txt文件移动到e:\test文件夹下
move e:\23.txt e:\test>nul&&echo 移动到文件夹下

20、del命令删除文件

@echo off
::删除该层目录下的所有文件,需要确认[Y/N]
del d:\test
pause
::不需要确认
del /q d:\test
::删除该目录下所有层级的文件,不删除文件夹,需要逐个文件夹确认
del /s d:\test
::删除文件111.png,不需要确认
del d:\test\111.png

21、cope命令复制文件

@echo off
::将d:\test\test.txt复制到e:\test1\目录下并重命名为test2.txt
::如果test2.txt文件已存在,将自动覆盖
copy d:\test\test.txt e:\test1\test2.txt
::将e:\test该层目录下所有文件复制到d:\test1\test3文件夹下
::前提d:\test1\test3文件夹必须已存在
::相同文件名的文件会被覆盖
copy e:\test d:\test1\test3

22、xcope命令复制文件

@echo off
::将e:\test目录下所有文件()复制到d:\test1
::/e目录下所有文件(),/y已存在时直接覆盖
xcopy e:\test d:\test1 /e/y

23、cope命令合并文件

@echo off
cd /d d:\test
::129.txt和156.txt两个文件内容合并存入新建的new.txt中
copy 129.txt+156.txt new.txt
::打印出new.txt中的内容
type new.txt
::将d:\mp3\111.mp3和e:\2.mp3以二进制数据合并复制到d:\new.mp3
::其中/b二进制,/a文本形式
copy /b d:\mp3\111.mp3+e:\2.mp3 d:\new.mp3

24、ren命令重命名文件(夹)

@echo off
::1.txt重命名为58.bat
ren d:\test\1.txt 58.bat
::将d:\test\目录下所有文件名为1开头的txt文件改为bat文件
ren d:\test\1*.txt *.bat
::将d:\test\目录下所有文件名为1开头三个字符的bat改为txt文件
ren d:\test\1??.bat ???.txt

25、call使用

在程序中调用子脚本,在当前程序中运行子脚本代码,子脚本执行完后继续执行本程序之后的代码

    ::该文件名为test.bat
    @echo off
    echo 这是主程序第一个输出
    timeout 2
    call test1.bat param1 param2
    timeout 2
    echo 这是主程序第二个输出
    pause

    ::该文件名为test1.bat
    @echo off
    timeout 1
    echo 这是子程序第一个输出
    echo 这是接收到的第一个参数%1 和第二个参数%2
    pause

26、timeout延迟

@echo off
set a=1
:start
echo %a%&set /a a=a+1
timeout 1 > nul
goto start
pause

@echo off
::每隔一秒输出斐波拉契数列
set a=1
set b=1
echo %a%&timeout 1 >nul
echo %b%&timeout 1 >nul
:start
set /a c=a+b
echo %c%&set a=%b%&set b=%c%
timeout 1 > nul
goto start
pause

27、start命令

注意:执行start时将开启一个新线程来执行该程序,原程序不受影响继续执行

@echo off
::打开test.txt文件
start e:\test.txt
::启动jar包
start java -jar e:\demo.jar
pause

28、调用弹框

::一、MSG命令方式
@echo off
::/time:5设置时间弹框的显示时间为5S,5S后自动关闭
msg * /time:5 这里是弹窗显示的文本
pause
::设置弹窗的多行文本
(echo 这是弹窗的第一行文本
echo 这是第二行文本)|msg * /time:5
pause

29、获得管理员权限

可尝试以下两种方式

@ echo off
%1 %2
ver|find "5.">nul&&goto :Admin
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof
:Admin
::上面这段代码之后执行的所有东西都是管理员权限方式

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
	echo 请求管理员权限...
	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"
exit /B
:gotAdmin
echo 获得管理员权限
pause

30、for语句读取文件内容

@echo off
::按行读取d:\test.txt文件中的内容,输出每行的第一个数据,默认每行内以空格和tab为分隔符
for /f %%i in (d:\test.txt) do echo %%i
::delims参数指定分隔符为/
for /f "delims=/" %%i in (d:\test.txt) do echo %%i
::tokens参数指定读取第二列,tokens=*读取所有
for /f "tokens=2 delims=/" %%i in (d:\test.txt) do echo %%i
::skip参数直接跳过前两行,从第三行开始
::tokens=2,*读取第二个和之后剩余所有,%%i为第一列值,%%j为之后剩余所有
::tokens=1,4读取第一个和第四个,%%i为第一列值,%%j为第四列值
::('net start')表示将单引号内语句的执行结果作为集合
for /f "skip=2 tokens=1,* delims=/" %%i in ('net start') do echo %%i %%j
::("asc/2ap/as5")表示对字符串进行处理
for /f "tokens=2,* delims=/" %%i in ("asc/2ap/as5") do echo %%i--%%j
::eol参数直接忽略以#开头的行
for /f "eol=# tokens=*" %%i in (d:\test.txt) do echo %%i

31、sc和net命令

@echo off
::关闭/启动MySQL服务,执行该条语句后会立即执行之后的代码,不会等待停止/启动的过程
sc stop MySQL
sc start MySQL
::设置MySQL服务为自启动,demand手动,disabled禁用
sc config MySQL start= auto
::安装服务
sc create MySQL binPath= "F:\installFiles\mysql-5.7.1.exe"
::卸载服务(卸载前先关闭服务)
sc delete MySQL
::关闭/启动MySQL服务,等待停止/启动的过程,完成后执行之后的代码
net start MySQL
net stop MySQL
::查看所有运行的服务
net start

32、ping命令

@echo off
ping 192.168.0.225
::无休止ping某地址
ping www.baidu.com -t

33、mshta命令

::可以调用vb脚本和js脚本
mshta vbscript:window.execScript("alert('hello world!');","javascript")(window.close)
mshta javascript:window.execScript("msgBox('hello world!')(window.close)","vbs")
mshta vbscript:msgbox("弹窗单行显示内容",65,"弹窗的标题")(window.close)
mshta vbscript:CreateObject("Wscript.Shell").popup("弹窗内容",7,"标题",64)(window.close)
::连续弹二个信息框
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")

感谢

在此感谢原文作者的文章,本文中有很多的例子都参考下边这篇文章。
https://blog.csdn.net/WZH577/article/details/100512784

你可能感兴趣的:(服务器,windows,cmd,powershell,shell)