文档库 最新最全的文档下载
当前位置:文档库 › 批处理set命令介绍

批处理set命令介绍

set
直接键入set显示当前系统的所有环境变量
set p
后跟字符串 显示以字符串开头的所有环境变量



@echo off
set str=hello
set sri=word
echo %str%
echo %str%
echo 按任意键退出窗口...&pause>nul

直接为字符串赋予变量\直接赋予变量

set /a

set的计算功能

@echo off
::加
set /a jia=1+1
::减
set /a jian=10-9
::乘
set /a cheng=8*2
::除
set /a chu=16/4
echo 和:%jia%,差:%jian%,积:%cheng%,商:%chu%
echo 按任意键退出...&pause>nul

可以考虑做一个计算器吗?
如下:
set /p input=请输入计算公式(不需要输入等号):
set /a result=%input%
echo.
echo %result%
echo.
echo 按任意键退出...&pause>nul

可进行一次运算,结果输出后按任意键退出窗口

如何反复运行呢?
采用goto 流程跳转命令

@echo off
:a
set /p input=请输入计算公式(不需要输入等号):
set /a result=%input%
echo.
echo %result%
echo.
%result%=* goto a
echo 按任意键退出...&pause>nul

使用
set /a 命令来求余数
set /a 9%4
余数为1
set /a 68545/5
13709
set /a 68548%5
3
set /a 68545%5
0

在批处理文件中须写成 set /a 9%%4 、set /a 68548%%5.....

因%在cmd中的特殊性,其在批处理文件中书写时必须使用%来进行转义,而转义过后的写法就是%%。
看到这里可能你还是不明白,这里可以做一个实验——实验要求:输出一个%。

在cmd
echo %
显示为 %
在批处理中
@echo off
echo %
pause
运行:
ECHO 处于关闭状态。
请按任意键继续. . .

改变批处理中的代码
@echo off
echo %%
pause
运行:
%
请按任意键继续. . .
如上 ↑

下面的比较难懂一些 ,慢慢来

引用 helloword123 在set一讲中的介绍
③:复合算术运算符
依次为 += ,-= ,*= ,/=,%=(批处理中是%%=)
加等 减等 乘等 除等 余等 四种符号 错了是五个
和 差 积 商 余数
如何应用?
例子: 计算从1加到100的数字的和。 我们都知道是5050 那么使用批出理该怎么计算呢?
for /l %%i in (1,1,100) do echo %%i
初始值 为1 步长为1 终止数为100
每隔一个数显示一次

1
2
3
4
5
......
命令效果 显示1~100的所有数字。
既然可以显示 那么也可以相加
由1+到100
echo off
for /l %%i in (1,1,100) do set /a a=1+%%i
echo %a%
for /l 参数的命令 nameji 的介绍
for /l 计数循环
@echo off
for /l %%i in (1,1,100) do set /a a=1+%%i
echo %a%
pause

@echo off
for /l %%i in (1,1,100) do set /a a=1+%%i
echo %a%

=2 =3 =4 =5 ......只不过没有显示出来 因为命令本身是有问题的
这样一来 for /l 语句执行完毕 所带出的最后一个结果也就是
set /a a=1+%%i (这时%%i的值为100)
set /a a=1+100
echo %a%
echo 101
so
改:
@echo off
set n=0
for /l %%i in (1,1,100) do set /a a=%n%+%%i
echo %a%
pause

100

请按任意键继续.....
仍然不对。
方向不对。
回加
应该让他来回的加!!!
已经得到的值 再回去加一遍!!!
如此这般即是:

@echo off
set a=0
for /l %%i in (1,1,100) do set /a a=%a%+%%i
来表述一下其中的计算过程、顺位。
第一个 %%i 的值为1 那么第一个a的值:
即set /a a=%a% +1
set /a a=0+1
echo %a%
echo 1
这时 for循环的第一条命令完成 ,开始第二条
然而 这时的a 被赋予值 为1
再继续运算则是:
set /a a=%a%+2
set /a a=1+2
echo %a%
echo 3
如此循环、回加、最后+到100
for 语句完毕。
echo %a%
即是我们要得到的结果,
简而言之,就是a的值被带入,继续运算!
那么 这时的代码 可以这样写:
@echo off
set a=0
for /l %%i in (1,1,100) do set /a a=%a%+%%i
echo %a%
pause>nul

100
......
====
!!!!!
草泥马,还是不对啊!
呵呵呵呵呵呵、、、、你TM
别管我,我去看看怎么回事,真草了。。。

@echo off
set n=0
for /l %%i in (1,1,100) do set /a n=%n%+%%i
echo %n%
pause>nul

echo 100
n的值未被代入。
直到最后一条for命令执行完毕,期间n的值都是0
因此%n%两边的%非拿掉不可。
-----------------------------------------------------------------------
amwfjhh:

你这是变量延时问题。去掉%是set的语法特性,相当于给变量名开了绿灯,正常调用变量、在语句块内不开变量延时的话、是距其 (语句块) 最近一次赋值的值。这里累加还可以写成set /a n+=%%i,是合法赋值语句之一。

------------------------------------------------------------------------------
@echo off
set n=0
for /l %%i in (1,1,100) do set /a n=n+%%i
echo %n%
pause>nul

echo 5050

正确回显

这个代码中Set /a n=n+%%i,第二个n的两边没有“%”,按照常规,变量在引用时,要在变量名两边加上“%”——set /a的特性就是在引用变量时,可以省略 “%”(当然你也可以不省略——但强烈建议你省略)。
~~~

让我们来看一些复合运算符的写法

@echo off
set n=0
for /l %%i in (1 1 100) do set /a n+=%%i
echo %n%
pause>nul

echo 5050
正确回显

如下 :
set /a n=n+%%i = set /a n+=%%i 理解为累加
set /a n=n-%%i = set /a n-=%%i 累减
set /a n=n*%%i = set /a n*=%%i 累乘
set /a n=n/%%i = set /a n/=%%i 累除
set /a n=n%%%%i = set /a n%%=%%i 累余 ...... 按照余数的最大数来说... 余数小于除数


被除数 除以 除数 等于 商 以及 余数
被除数 被处理的数字
除数 用作处理的数字
商 得到的果
余数 剩余的果


加减乘除各一条

---------------------------------------------------------------------------
set n=3
for /l %%i in (3,3,24) do (set n=n*%%i)
echo %n%
pause>nul

二进制数 八进

制数 十进制数 十六进制数

相互的转换方法。

按位与的运算方式

set /a "a=9&5"


按位或的计算方法以及符合表达

set /a "a=9|5"

按位异或

当赋予变量的值是数字时(八进制,十进制,十六进制,)
set /a 可一次性赋予多个变量
例:
set /a a=10,b=0100,c=010110,d=0x6ff,e=0x8888,f=0100001

C:\Users\Administrator>set /a a=10,b=0100,c=010110,d=0x6ff,e=0x8888,f=0100001
32769
C:\Users\Administrator>echo %a% %b% %c% %d% %e% %f%
10 64 4168 1791 34952 32769

最终显示结果为十进制数。

替换字符串吧!
⑦ 替换字符串中的符号?
将变量中指定字符串替换为其他字符串

例如将字符串中的"o"替换为"-"
@echo off
set str=helloword
set str=%str:o=-%
echo %str%
pause>nul

⑧截取字符串

@echo off
Set a=一二三四五六七八九十
Set a1=%a:~2,3%
Set a2=%a:~2,-5%
Set a3=%a:~-8,3%
Set a4=%a:~-8,-5%
echo %a1% %a2% %a3% %a4%
pause

①.@echo off
set a=123456789
set a1=%a:~0,5%
echo %a1%
pause>nul

@echo off
Set a=887133526
Set a1=%a:~2,3%
echo %a1%
rem 88:~三个数 1.2.3 713
rem 713
pause >nul

@echo off
set a=88163321289
set a1=%a:~5,8%
echo %a1%
rem 从第五个数后面的那个数,开始数,数8位。
rem echo 321289
pause>nul

输入set 没有显示的环境变量

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

======================================

相关文档