中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 00:47
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » set /a怎么不显示 查看 1,073 回复 8
楼 主 set /a怎么不显示 发表于 2010-06-14 01:22 ·  中国 湖北 潜江 电信
初级用户
积分 27
发帖 24
注册 2010-05-02 21:22
16年会员
UID 165987
性别 男
状态 离线
如下:
set a=3.
set /a b=a+1
运行显示:运算符不存在。
改成:
set a=3.
set /a b=a+1>nul
运行结果还是运算符不存在。
怎么才能把“运算符不存在”不让电脑显示啊?>nul都不管用了,哪个懂的教下。
2 发表于 2010-06-14 07:22 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
set a=3
set/a b=a+1
set/a a=3,b=a+1

屏蔽错误输出使用 2>nul
3 发表于 2010-06-14 11:48 ·  中国 陕西 咸阳 电信
初级用户
★★
积分 128
发帖 122
注册 2009-09-21 06:24
16年会员
UID 152378
性别 男
状态 离线
我不知道LZ为什么要对错误的语法再屏蔽错误的提示…批处理不是高级程序设计语言,对变量的引用要加%
4 发表于 2010-06-14 12:03 ·  中国 湖北 潜江 电信
初级用户
积分 27
发帖 24
注册 2010-05-02 21:22
16年会员
UID 165987
性别 男
状态 离线
回3楼的话:
我弄了一个记录数据的东西,要加入编号。做法如下:
1.先用if判断有没有记录文件,如果没有,设置记录号为0;
2.如果有记录,就设记录里面的第一个数为记录号(取法为%m:~0,1%);
3.记录号到10,也就是两位时,再取一位就会出错,所以我就又加了个判断(
set /a s=%m:~0,2%
if errorlevel 1 goto next

这里用if判断上一个是不是运行成功,当记录号是一位时,是不能成功的,但是当记录号是两位时,就能成功了,就会直接到next。
当然大家哪个有更好的办法的,可以发出来教下我,我也是初学者。
5 发表于 2010-06-14 12:04 ·  中国 湖北 潜江 电信
初级用户
积分 27
发帖 24
注册 2010-05-02 21:22
16年会员
UID 165987
性别 男
状态 离线
另外谢下Hanyeguxing, 他的办法很好。
6 发表于 2010-06-14 13:13 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@echo off
if exist 记录.txt set/p p=<记录.txt
set/a p+=1
echo.新记录号:%p%
>记录.txt echo.%p%
或:
@echo off
if exist 记录.txt for /F "tokens=1*" %%a in (记录.txt) do set a=%%a&set b=%%b
if not defined b set "b=寒 夜 孤 星"
set/a a+=1
echo.新记录号:%a%.其他内容:%b%
>记录.txt echo.%a% %b%


[ Last edited by Hanyeguxing on 2010-6-14 at 13:21 ]
7 发表于 2010-06-14 13:38 ·  中国 湖北 潜江 电信
初级用户
积分 27
发帖 24
注册 2010-05-02 21:22
16年会员
UID 165987
性别 男
状态 离线
6楼的第二个代码确实好用,比我原来的好多了。不过我用过之后发现了个小问题,因为我的记录号是用1.来写的,用你的set a=%%a得出的结果是1.因为多个.所以下面的计算也会跟着出错。只能用set /a a=%%a,但是又会多出几个显示运算符不存在。
最后的办法是用你教的:set /a a=%%a 2>nul
(2>nul关闭错误回显)
8 发表于 2010-06-14 14:57 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
带点的话:
@echo off
if exist 记录.txt set/p p=<记录.txt
set/a p+=1
set p=%p:.=%
echo.新记录号:%p%.
>记录.txt echo.%p%.

或:

@echo off
if exist 记录.txt for /F "tokens=1* delims=." %%a in (记录.txt) do set a=%%a&set b=%%b
if not defined b set "b=寒 夜 孤 星"
set/a a+=1
echo.新记录号:%a%. 其他内容:%b%
>记录.txt echo.%a%. %b%
9 发表于 2010-09-27 17:30 ·  中国 北京 联通
初级用户
积分 25
发帖 20
注册 2009-06-16 23:10
17年会员
UID 147569
状态 离线
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2
论坛跳转: