中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-04 22:07
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 相当菜的一个问题! 查看 772 回复 14
楼 主 相当菜的一个问题! 发表于 2007-04-19 08:03 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
a.bat
..
set ? = 1
if "%?%" == "1" goto exit
..
:exit
b.bat

b.bat
..
set s = %?% 或者是 set s = "%?%"
echo "%s%"

结果显示怎么是 "" 空的呢? 赋的变量值跑哪里去了?
是不是有语法错误?
我刚学,太菜了,别见笑~~

[ Last edited by hulongzhuo on 2007-4-18 at 07:12 PM ]
2 发表于 2007-04-19 08:08 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
HLPE ME !!
3 发表于 2007-04-19 08:14 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
郁闷中.......
4 发表于 2007-04-19 08:17 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
在里面加上几个pause,你就知道哪一步出错了。
Windows 一键还原
http://www.yjhy.com
5 发表于 2007-04-19 08:26 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
刚才试了,我就是用 S = 1
然后ECHO "%S%" 也是空的,
奇怪了??
6 发表于 2007-04-19 08:31 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
是不是没有定义啊?
DIM S
S = 1
"%S%"

这样行吗?
好像不需要定义的呀,
7 发表于 2007-04-19 08:35 ·  中国 安徽 芜湖 电信
高级用户
★★★
积分 866
发帖 415
注册 2005-12-04 11:19
20年会员
UID 46459
状态 离线
@echo off
set num=1
echo %num%
if %num% == 1 echo ok
pause
附件
未命名.JPG
欢迎你到批处理爱好者联盟QQ群:18023953
8 发表于 2007-04-19 08:39 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
感谢楼上热心的兄弟!!
还抓了图给我!
真不知道该怎么谢了..

就是太菜,我语法太模糊了,我会尽快努力学习地.
9 发表于 2007-04-19 08:42 ·  中国 新疆 乌鲁木齐 电信
高级用户
★★★
Autowalk
积分 845
发帖 375
注册 2007-03-03 01:58
19年会员
UID 80606
性别 男
状态 离线
a.bat中的环境变量没有传递到b.bat
10 发表于 2007-04-19 08:50 ·  中国 广东 东莞 电信
中级用户
★★
积分 294
发帖 135
注册 2007-03-09 14:47
19年会员
UID 81212
性别 男
状态 离线
是的,就是没得到环镜变量,是7楼的兄弟提醒了我,
原来 "SET S=1" 中间是没有空格的,要不然死活也得不到值,
这些东西真的难以注意到, 我倒是认为有空格跟没有空格有什么区别呢??
11 发表于 2007-04-19 09:01 ·  中国 浙江 杭州 联通
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
a.bat
@echo off
set ?=1
if "%?%" == "1" goto exit
:exit
b.bat


b.bat
set s=%?%
echo %s%
pause


变量赋值时别添加多余空格。
12 发表于 2007-04-19 09:18 ·  中国 广东 广州 番禺区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
噢?怎么不用call b。bat
知,不觉多。不知,乃求知
13 发表于 2007-04-19 11:54 ·  中国 福建 泉州 永春县 电信
初级用户
积分 20
发帖 8
注册 2007-04-19 11:33
19年会员
UID 85737
性别 男
状态 离线
我也想知道!
14 发表于 2007-04-19 12:05 ·  中国 陕西 西安 电信
初级用户
★★
积分 112
发帖 50
注册 2007-04-15 00:59
19年会员
UID 85191
性别 男
状态 离线
我个人认为这个问题是由批处理程序中的可变参数引起的.楼主在b.bat中的set s = %?%句调用a.bat文件传递的参数,但在a.bat中的:exit
b.bat中确没能把需要的参数给出,就错在这了!
应该改成这样:

set ?=1
if "%?%" == "1" goto exit
:exit
b.bat %?%


set s=%1
echo %1
pause

在XPsp2下测试可以正确传递!
15 发表于 2007-04-19 12:09 ·  中国 陕西 西安 电信
初级用户
★★
积分 112
发帖 50
注册 2007-04-15 00:59
19年会员
UID 85191
性别 男
状态 离线
另外还要注意的是在2.bat中的set s=%1,这句中的百分号后跟的是1,2,3,的1,而不是L.因为在BAT程序中只能有%0~%9这10个可变参数(当然要是用了SHIFT命令就另当别论了!).可变参数和变量是不同的概念!我也是现学现卖,望高手批评指正!!
论坛跳转: