windows脚本的语法

1、不想使得脚本里面的语句都输出来,可以使用@符号,这个符号所在的语句可以隐去这一句的输出,若想整个脚本都不输出语句,则可以再文件的最开头使用这一句:@echo off,如果在使用了这一句的前提下,又想是某一句显示出来,可以这样写:

@echo on
echo 3
@echo off

这样echo 3就可以将命令显示出来
2、对变量的处理
(1)对变量的设置
给变量设置字符串值:

set var1=abcd

(2)对变量设置数字值,这个值是int类型的

set /a var2=10

这样把var2这个变量设置成了数字10
(3)从输入设置变量的值

set /p var3="input a number"

(4)对变量的引用

将var2的值赋值给var4

set var4=%var2%

(5)对变量的分割
一个典型的对变量的分割例子就是log文件的名称需根据时间来建立相应的文件,一般这么写:

set tsp="%time:~0,1%"
if %tsp%==" " (set date_time=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%) else (
set date_time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
)

首先来看一看date和time变量是什么

echo %date%
2018/11/28 周三
echo %time%
16:40:43.32

这样就好办事了,首先看一下date_time=%date:~0,4%%date:~5,2%%date:~8,2%的意思,%date:~m,n%表示取从date变量的第m位(从第0位开始计数)开始之后的n位字符,在这里就是取这样这句话的结果就是取“2018/11/28 周三”的“2018”。
那么tsp是干嘛的?这个变量是测试是上午还是下午的,如果是上午,那么时间的时这里就只有一位,最前面是空格,而不是默认为0,所以需要判断,然后手动加上0这一位。

再举一些变量分割的例子:

输入的命令    结果        效果                    
echo %var%    1234567890 显示所有                  
echo %var:~4%   567890   从第4个字符以后开始显示          
echo %var:~4,3%   567      从第4个字符以后开始显示,并只显示前3个   
echo %var:~-4%  7890    从倒数第4个字符开始显示          
echo %var:~-4,3% 789     从倒数第4个字符开始显示,并只显示前3个   
echo %var:~4,-2% 5678    从第4个字符以后开始显示,显示到还剩2个为止 
echo %var:~0,3%  123     从头开始显示,并只显示前3个字符      
echo %var:~0,-3% 1234567   从头开始显示,显示到还剩3个字符为止
set var2=%var:ld=ms and bugs%  将var变量中所有的ld换成ms and bugs,输出结果赋值给var2

利用以上的规则进行一些字符串操作:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set a=  abcd
::去除左边的空格
:left
if "%a:~0,1%"==" " set a=%a:~1% && goto left
echo %a%


::去除字符串所有的空格
set a=abcd  efg   
set a=%a: =%
echo %a%E

::去除字符串右边的空格
set a=abcdefg 
:right
if "%a:~-1%"==" " (set a=%a:~0,-1%
echo %a%
goto right
)
echo %a%A

3、程序的控制语句
(1)if语句
首先if判断是否两个数值相等,数值比较有“等于”、“大于”、“大于等于”、“小于”、“小于等于”、“不等于”六种,这六种分别对应的写法:

EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

这些东西可以通过输入命令 if /?查看到。
当然等于还有一种写法就是“==”,例子:

@echo off
set /a a=1
set /a b=2
if %a% lss %b% echo aaa
if 5 gtr 4 echo bbbbb
if 3==3 echo ccccc
pause

if还有一些比较特殊的用法,比如文件是否存在和变量是否存在。例子:

if exist aaa.txt echo exist
if defined a echo %a%
@echo off
set /a a=1
if %a%==2 echo 3
pause

在这里一定要注意,if判断条件之后的语句一定要在同一行,否则就会报错,如果想写多行,可以使用圆括号,比如:

if %a%=="haha haha" (
	echo 3
)

其中“(”一定要在if的同一行
(2)for语句
通过输入命令for /?可以大致了解到for语句的集中使用方法
1、类似c语言的循环

@echo off
for /l %%i in (1,1,50) do echo %%i
pause

表示i在1到50每隔1这个序列里面取值,然后输出i,在这里如果写的是脚本,则要使用%%i,而不是%i,如果直接写在命令行里面,则 使用%i,另外这里的变量名必须使用单个字母的变量,一定不能有多个字母,否则会报错。
这段语句就是输出1到50.

2、遍历文件

@echo off
for  %%i in (*) do echo %%i
pause

在这里会遍历所有当前目录下面的文件,注意不包含目录,目录不会输出。
如果想输出当前文件夹下面所有的目录:

@echo off
for /d %%i in (*) do echo %%i
pause

跳转语句
定义一个标识,然后跳转到这个标识

:ok
goto ok

猜你喜欢

转载自blog.csdn.net/whoami_I/article/details/84585085