您现于de位置乃:亚博 > 其他

亚博 2020-02-13 其他 48

bat脚本常用命令汇总

注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码)

1 语句注释

rem命令行注释 可以回显(语句会于命令行中显示);

::两个冒号 效果同上 但不会回显.(冒号后加任意非字母数字字符都可起到注释作用)

2 暂停

pause暂停 命令行中出现"请按任意键继续..."

自定义暂停时de文本 如下:

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

3 输出和换行

echo后加内容即输出该内容 如:echo "welcome!";

echo.换行命令 即echo后加1个点

4 开启关闭回显

@置于语句前则该条语句不会回显(无视echo on)

echo off关闭回显功能 直到出现echo on 但其本身会回显 故其之前往往和@1起使用 即@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

6 设置标题title 查看返回码errorlevel

@echo off
::title设置标题
title 我测试1下!
::用以判断上1条命令乃否执行成功 默认为0 出错为1
echo %errorlevel%
if %errorlevel% 0 echo 没问题
pause

7 设置颜色

例:color 0A

20190903141905770.png

8 if语句

注意:if语句块于执行时乃当做1条语句加载de 故需要通过11中de延迟赋值来解决其内部变量引用de问题

::if常规用法 注意空格
@echo off
:start
set /p a=
if not %a%==1 (
echo 请输入1
goto start
) else (
echo 输入正确
)
pause>nul

 

@echo off
if not exist d:\test.bat (
echo @echo off>d:\test.bat
) else (
del d:\test.bat
)
pause>nul
@echo off
set a=1
if defined a (
echo 已定义a
) else (
echo 未定义a
)
pause>nul

 

@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>nul

如上de操作数可以乃字符串 数值 变量;当参与比较de字符串乃字符串时 将被转换为对于deASCII码进行比较;比较运算符有如下:

20190904185809871.png

9 goto语句

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

10 set用法之接收用户输入数据

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

11 set用法之定义变量和延迟赋值

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

注意:批处理于运行"set a=2&echo %a%"之前 会先把这1句整句读取并做了预处理 即对变量a赋了值 那么%a%值为4 为解决该问题 批处理设计了变量延迟.也就乃说 于读取了1条完整de语句之后 不立即对该行de变量赋值 而会于某个单条语句执行之前再进行赋值 具体实现如下:

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

12 set用法之系统变量

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

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

14 for语句

@echo off
::关键字for in do必有 括号必有
::分隔符可以乃逗号 分号 等号 空格
::输出为A换行1换行B...
for %%i in (A,B,C) do echo %%i & echo 1
pause>nul
@echo off
::找出D盘下所有文件
for %%i in (d:\*.*) do echo "%%i"
pause
@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 当前硬盘de分区有:
for %%i in (%str%) do if exist %%i: echo %%i:
pause
@echo off
::找出当前目录下文件名为4个字符detxt文件
for %%i in (????.txt) do echo "%%i"
pause

15 变量%0--%9

%0指该文件本身 %1--%9为接收到de参数 如下例子中子程序de%1即为主程序传输deparam1 %2即为param2

::该文件名为test.bat
@echo off
echo 这乃主程序第1个输出
timeout 2
start test1.bat param1 param2
timeout 2
echo 这乃主程序第2个输出
pause

 

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

16 切换目录

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

20190904202053518.png

17 md命令创建文件夹

::创建文件夹
md e:\test\test1
::文件夹名有空格需要加引号
md "e:\test op"
::空格隔开 创建多个
md e:\test1 e:\test9\test2 "e:\test5 lmn"

 18 rd命令删除文件夹

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

 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
::删除该层目录下de所有文件,需要确认[Y/N]
del d:\test
pause
::不需要确认
del /q d:\test
::删除该目录下所有层级de文件,不删除文件夹,需要逐个文件夹确认
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文件夹必须已存于
::相同文件名de文件会被覆盖
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两个文件内容合并存入新建denew.txt中
copy 129.txt+156.txt new.txt
::打印出new.txt中de内容
type new.txt
::将d:\mp3\111.mp3和e:\2.mp3以2进制数据合并复制到d:\new.mp3
::其中/b2进制,/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开头detxt文件改为bat文件
ren d:\test\1*.txt *.bat
::将d:\test\目录下所有文件名为1开头3个字符debat改为txt文件
ren d:\test\1??.bat ???.txt

25 call使用

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

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

 

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

20190905175646742.png

26 timeout延迟

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

 

@echo off
::每隔1秒输出斐波拉契数列
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时将开启1个新线程来执行该程序 原程序不受影响继续执行

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

28 调用弹框

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

 

::1 调用VBScriptdeMsgBox实现弹窗
@echo off
::第2个参数65de解释于代码之后de列表中
mshta vbscript:msgbox("弹窗单行显示内容",65,"弹窗de标题")(window.close)
::多行显示文本可于文本中使用vbCrLf或vbNewLine
set msg="多行显示vbCrLf这乃第2行vbNewLine这乃第3行"
mshta vbscript:msgbox(Replace(Replace(%msg%,"vbCrLf",vbCrLf),"vbNewLine",vbNewLine),6,"自定义标题")(window.close)

 MsgBoxdebutton参数取值如下:

0 = vbOKOnly - 只显示确定按钮.
1 = vbOKCancel - 显示确定和取消按钮.
2 = vbAbortRetryIgnore - 显示放弃 重试和忽略按钮.
3 = vbYesNoCancel - 显示乃 否和取消按钮.
4 = vbYesNo - 显示乃和否按钮.
5 = vbRetryCancel - 显示重试和取消按钮.
16 = vbCritical - 显示临界信息图标.
32 = vbQuestion - 显示警告查询图标.
48 = vbExclamation - 显示警告消息图标.
64 = vbInformation - 显示信息消息图标.
0 = vbDefaultButton1 - 第1个按钮为默认按钮.
256 = vbDefaultButton2 - 第2个按钮为默认按钮.
512 = vbDefaultButton3 - 第3个按钮为默认按钮.
768 = vbDefaultButton4 - 第4个按钮为默认按钮.
0 = vbApplicationModal - 应用程序模式:用户必须响应消息框才能继续于当前应用程序中工作.
4096 = vbSystemModal - 系统模式:于用户响应消息框前 所有应用程序都被挂起.

注意:第1组值 (0 - 5) 用于描述对话框中显示de按钮类型与数目;第2组值 (16, 32, 48, 64) 用于描述图标de样式;第3组值 (0, 256, 512) 用于确定默认按钮;而第4组值 (0, 4096) 则决定消息框de样式.于将这些数字相加以生成 buttons 参数值时 只能从每组值中取用1个数字.


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
::上面这段代码之后执行de所有东西都乃管理员权限方式
@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文件中de内容,输出每行de第1个数据,默认每行内以空格和tab为分隔符
for /f %%i in (d:\test.txt) do echo %%i
::delims参数指定分隔符为/
for /f "delims=/" %%i in (d:\test.txt) do echo %%i
::tokens参数指定读取第2列,tokens=*读取所有
for /f "tokens=2 delims=/" %%i in (d:\test.txt) do echo %%i
::skip参数直接跳过前两行,从第3行开始
::tokens=2,*读取第2个和之后剩余所有,%%i为第1列值,%%j为之后剩余所有
::tokens=1,4读取第1个和第4个,%%i为第1列值,%%j为第4列值
::('net start')表示将单引号内语句de执行结果作为集合
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参数直接忽略以#开头de行
for /f "eol=# tokens=*" %%i in (d:\test.txt) do echo %%i

31 sc和net命令

@echo off
::关闭/启动MySQL服务,执行该条语句后会立即执行之后de代码,不会等待停止/启动de过程
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服务,等待停止/启动de过程,完成后执行之后de代码
net start MySQL
net stop MySQL
::查看所有运行de服务
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,"弹窗de标题")(window.close)
mshta vbscript:CreateObject("Wscript.Shell").popup("弹窗内容",7,"标题",64)(window.close)
::连续弹2个信息框
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")


上1篇:没有了

下1篇:appstorm2018设置注释符缩进位置

评论