# WINDOWS脚本入门1-变量

# 基本命令

我对批处理的第一印象是新建一个记事本写几条cmd命令,然后改成bat后缀就可以直接运行。那么我们平常在cmd里输入命令时是怎样的呢?输入命令时是:

cmd样式

可以看到我们输入命令的时候也会显示出来,那么在批处理中每行的命令也是这样的,在执行前都会显示出命令,如果我们只想显示执行结果而不显示命令本身需要

@不想回显的命令

@只是作用这一条命令,如果想后面的命令都不想回显命令本身:

echo off

一般我们也不想这条命令回显,那么在这条命令加上@:

@echo off

如果想开启回显:

@echo on

暂停等待键盘响应:

pause

有上边的这些命令我们可以先输出一个hello world了:

@echo off
echo hello world
pause
接下来是一些不常用的命令,显示当前行的回显状态:
echo
1
2
3
4
5

这条命令会显示”ECHO 处于关闭状态”或”ECHO 处于开启状态”。有时候我们输出一个变量的值,如果这个变量为空,也会得到这个提示。

输出一个空行,相当于一个回车:

echo.

注意echo和.之间不能有空格。

# 变量

设置新变量,给变量赋值:

set 变量名=变量名

例子:

set money=10000

变量名的命名规则是:不能以数字开头,以字母或者下划线开头,且不区分大小写。

获取变量值:

%变量名%

例子:

%money%

从键盘获值赋值给变量:

set /p 变量名=要显示的提示信息

例子:

set /p money=请输入您想存钱的金额:

现在举个例子,同学们可以试着运行下:

@echo off
set money=1000
echo 初始金额:%money%
set /p money=你现在有多少钱:
echo 现在的金额:%money%
pause
1
2
3
4
5
6

现在我们想存入一部分钱:

@echo off
set money=1000
set money=%money%+100000
pause
1
2
3
4

但是这样会输出

1000+100000

对批处理不了解的同学可能会觉得很费解,我们不是想让这两个值想加么,怎么是这个结果,这是因为set 变量=值,这里值默认都按字符串处理。而批处理中字符串的拼接基本上就是两个字符串无缝放到一块就好。比如变量%money%和变量%owner%拼接的话:

%owner%拥有金额%money%

如果我们想让set =后面处理成表达式的话:

set /a money=%money%+100000

这样就会按数学表达式处理相加了。批处理中其他表达式是:

  • () :分组
  • ! ~ : 一元运算符
  • * / % + – :算数运算符
  • << >> : 逻辑移位
  • & : 按位“与”
  • ^ : 按位“异”
  • | : 按位“或”
  • = *= /= %= += -= &= ^= |= <<= >>= : 赋值
  • , :表达式分隔符

表达式中的”与”,”或”,”异或”运算符,我们需要用双引号引起来 。比如:

@echo off
set /a b=3 "&" 4
echo %b%  
set /a c=3 "|" 4
echo %c%
set /a d=5 "^" 4
echo %d%
set /a e=5 %% 3
echo %e%
set /a f=5/3
echo %f%
pause
1
2
3
4
5
6
7
8
9
10
11
12

注意有几个特殊的变量,%0,%1,%2,%3 . . . %9,%*

%0指的是自身批处理脚本的意思,他指当前批处理所在全路径。它有一个有意思的使用方式:

@echo off
set /a sum+=1
echo %sum%
pause
%0
1
2
3
4
5

自己调用自己导致无限循环!从而重复执行%0上边的语句。
%1,%2 … %9 是批处理脚本的参数,%*是一次输出所有参数。