Windows bat 编程基本语法

windows批处理语法

写批处理文件,除了了解基本语法外,你还需要熟悉常用的windows命令,那就先看看这篇文章:
windows常用命令

#重要说明

文件及目录路径:要使用反斜杠'**\**',不要使用正斜杠'/' 如:del d:\test2\file\my.txt
文件及目录路径:若存在空格,应使用双引号将路径引起来  如:del "d:\program files\file\my.txt"
文件及目录名中不能包含下列任何字符:\ / : * ? " < > |

0. 参数

bat批处理文件理论上支持无限多个参数的传入,但最多支持**9**个参数的获取

例:make_release.bat 258 mslugx 3 4 5 6 7 8 9 10 11 12 13 14 15

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %* // 命令行传递给批处理文件的参数
%0 // 批处理文件名(非全路径)  make_release.bat
%1 // 第1个参数  258
%9 // 第9个参数  9
%* // 从第1个参数开始的所有参数 258 mslugx 3 4 5 6 7 8 9 10 11 12 13 14 15

为了获取更多的参数,可以使用**shift**命令达到目的

shift /3 // 去掉第3个参数
echo  %1 %2 %3 %4 %5 %6 %7 %8 %9  // 输出:258 mslugx 4 5 6 7 8 9 10 11
shift /4 // 在上面剩余参数的基础上,再去掉第4个参数
echo  %1 %2 %3 %4 %5 %6 %7 %8 %9  // 输出:258 mslugx 4 6 7 8 9 10 11 12
shift /5 // 在上面剩余参数的基础上,再去掉第5个参数
echo  %1 %2 %3 %4 %5 %6 %7 %8 %9  // 输出:258 mslugx 4 6 8 9 10 11 12 13
shift   // 在上面剩余参数的基础上,再去掉第1个参数;shift、shift /0和shift /1的作用一致
echo  %1 %2 %3 %4 %5 %6 %7 %8 %9  // 输出:mslugx 4 6 8 9 10 11 12 13 14
参数扩展增强(以%1为例说明):【注:以下增强用法也适用于for变量】
     %~1   - 删除引号"  (1)若字符串首尾同时存在引号,则删除首尾的引号;(2)若字符串尾不存在引号,则删除字符串首的引号;(3)如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
     %~f1  - 将文件名扩展到一个完全合格的路径名
     %~d1        - 将文件名扩展到一个驱动器号
     %~p1        - 将文件名扩展到一个路径
     %~n1        - 将文件名扩展到一个文件名
     %~x1        - 将文件名扩展到一个文件扩展名
     %~s1        - 扩展的路径指含有短名
     %~a1        - 将 %1 扩展到文件属性
     %~t1        - 将 %1 扩展到文件的日期/时间
     %~z1        - 将 %1 扩展到文件的大小
     %~$PATH:1   - 查找列在 PATH 环境变量的目录,并将 %1扩展到找到的第一个完全合格的名称
                     如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

组合修定符:
    %~dp1        - 将 %1 扩展到驱动器号和路径
    %~nx1        - 将 %1 扩展到文件名和扩展名
    %~dp$PATH:1  - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径
    %~ftza1      - 若 %1 为目录或文件,会转变成dir的输出行

注:**%~dp0**   返回当前bat文件所在目录的全路径

注:**%~n0** 返回当前bat文件名(不含扩展名)

注:**%~nx0** 返回当前bat文件名(含扩展名)

使用for和goto打印各个参数

@echo off
call process.bat %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% "%random%"
pause
set "f=%*"
if not defined f (echo 没有参数! & goto :eof)
echo 过程名称:    %0
echo 完整参数:    %*
echo --------------------------------------
echo 用for循环:
set /a x=1
for %%i in (%*) do (call echo 第%%x%%个参数    %%~i & set /a x+=1)
echo --------------------------------------
echo 用goto循环:
set /a y=1
:loop
set "t=%~1"
if not defined t goto :eof
echo 第%y%个参数:    %~1
set /a y+=1
shift
goto loop

无限循环执行net user命令(按ctrl+c可以结束命令执行)

work.bat

@echo off
net user
%0

1. 常用特殊符号

& 顺序执行多条命令,而不管命令是否执行成功

例:cd /d d:\src&work.exe /o c:\result.txt // 先将当前工作目录切换到d:\src下,然后执行work.exe /o c:\result.txt命令

**&&** 顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
例:find "ok" c:\test.txt && echo 成功 // 如果找到了"ok"字样,就显示"成功",找不到就不显示

**||** 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
例:find "ok" c:\test.txt || echo 不成功 // 如果找不到"ok"字样,就显示"不成功",找到了就不显示

**|** 管道命令
例:dir *.* /s/a | find /c ".exe" // 先执行dir命令,然后对输出的结果执行find命令(输出当前文件夹及所有子文件夹里的.exe文件的个数)

**>** 将当前命令输出以覆盖的方式重定向
例:tasklist > p1.txt // 将tasklist的输出以覆盖的方式重定向到p1.txt文件中

**>>** 将当前命令输出以追加的方式重定向
例:tasklist >> p2.txt // 将tasklist的输出以追加的方式重定向到p2.txt文件中

**<** 从文件中获得输入信息,而不是从屏幕上,一般用于date time label等需要等待输入的命令
例:date <temp.txt // temp.txt中的内容为2005-05-01

**@** 命令修饰符 在执行命令前,不打印出该命令的内容
例:@cd /d d:\me // 执行该命令时,不打印出命令的内容:cd /d d:/me

**^** 转义字符及echo续行符号
(1) 用在特殊字符前面,用于取消该特殊字符的作用。支持的特殊字符有&、|、>、<、(、)、!、"等,不包括%
(2) echo输出时,可以将^后的下一行的字符串拼接在当前行后输出

**$** 在prompt命令中,称为选项转义字符,可以将其后的字符转义为特定的作用效果。

**>&**  将一个句柄的输出写入到另一个句柄的输入中。

**<&**  与>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中

**%**  非延迟环境变量引用符号

**!**  延迟环境变量引用符号

**:** 批处理标签引导符

**nul** 用于屏蔽命令的输出结果,常见用于pause > nul;有时我们输错命令,cmd上会提示:xx‘不是内部或外部命令...为了完全屏蔽掉这些,可以使用xx >nul 2>nul

*** ?**  文件通配符,*代表n个字符,?代表1个字符

2. 变量

dos计算说明:

(1)只能进行整数运算,精确到整数,不能进行浮点运算
(2)只能精确到32位,有效值范围是-2147483648至2147483647
(3)十六进制前缀为:0x 八进制前缀为:0

自定义变量

在定义变量时要尤其注意空格ÿ

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值