手把手教你写windows BAT

手把手教你写windows BAT

最近工作中老是用到BAT文件,在此做一下小结。

BAT文件中的变量

设置变量
语法:SET 变量名=变量值
说明:%变量名% 将可使用变量

例:   SET A="Hello"
           ECHO %A%

取消变量
语法: SET 变量名=
说明:%变量名%将变为空

例: SET A=

显示变量
语法: SET 变量名
说明: 将展示所有以变量名开头的变量
如果只输入SET, 将会展示出所有的变量

例: SET

输入变量(/p)
语法: SET /p 变量名=提示
说明: 屏幕出现提示,用户输入将赋值给变量

例:     SET /p A="Input a value:"

数值变量(/a)
语法: SET /a A=变量值或表达示
说明: SET /a A=1+2 => A == 3

例: SET /a A=1+2
     ECHO %A%

注意:
SET语句不能出现在复合语句如if或者for语句中。

预定义变量
%CD% : 当前路径
%PATH%: 当前环境变量
%RANDOM%: 随机数
%TIME%: 当前时间
%DATE%: 当前日期
%0%: 当前BAT文件的路径(包含文件名)
%1%: 当前BAT文件的输入参数,%2,%3…..以此类推

扩展变量
当前路径及文件名为:C:\code\Test.txt
%0: Test.txt
%~dp0: C:\code\
%cd%: C:\code
%~nx0: Test.txt
%~n0: Test
%~x0: .txt

关于变量的截断
%VAR:str1=str2%, 将%VAR%中的str1替换成str2
%VAR:~0,-2%: 提取%VAR%中从开始到倒数2个字符。
%VAR:~2%: 从第2个字符开始到最后
%VAR:~-2%: 从开始到倒数第2个字符
%VAR:~2,5%: 从第2个字符到第5个字符

BAT文件的常用关键字及语法

IF语句
判断参数

if "%1"=="/?" goto :usage
if "%A%"=="help" goto :usage

判断是否存在

if exist c:\test.txt echo yes
if not exist c:\test.txt echo no

if exist %filename% (
    del %filename%
)else (
    echo %filename% is missing
)

判断数值

if %ERRORLEVEL% EQU 0 echo no error

FOR语句
用for语句遍历所有参数

for %%x in (%*) do (
    echo %%X
)

GOTO语句

GOTO :Tag1

:Tag1
echo 'hello'

CALL语句
CALL语句与GOTO语句的主要区别在于,CALL语句可以传递参数,而且调用完会返回。GOTO语句则是直接跳转。

@echo off
@echo 'Call function here!'
@call :myfunc 1 2
@echo 'Call function return'
GOTO :EOF

:: Function definition here
:myfunc
echo 'myfunc here!'
set /a number1=%~1
set /a number2=%~2
echo param1 is %number1%
echo param2 is %number2%
GOTO :EOF

在函数中可以直接使用全局变量来传递返回值。
调用者也可能通过传递一个变量来给函数保存返回值。

@echo off
echo test function
set var1='yes'
echo before call, var is %var1%
call :myfunc var1
echo after call, var is %var1%
goto :EOF

:myfunc
set %~1='no'
goto :EOF

如何使局部变量与全局变量不冲突?
可以使用SETLOCAL/ENDLOCAL来实现这一功能

@echo off
echo test function
set var1='yes'
set var2='here'
echo before call, var1 is %var1%
echo before call, var2 is %var2%
call :myfunc var1
echo after call, var1 is %var1%
echo after call, var2 is %var2%
goto :EOF

:myfunc
SETLOCAL
set var2='there'
(
  ENDLOCAL
  set %~1='no'
)
goto :EOF
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值