![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 20:32 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [在线求助]变量未定义的问题 |
| 可打印版本 2,259 / 19 |
| 第1楼 HUNRYBECKY | 发表于 2006-12-18 22:49 |
| 银牌会员 发帖 442 积分 1,179 | |
|
[在线求助]变量未定义的问题 我想在CheckV.TXT中查找ACCESS字符串,如果找到就赋值给变量ACCESS,如果找不到则把值NO赋给变量,但是运用后这时则使用ECHO %ACCESS% 不能显示出改变量,说明变量NO没有赋给ACCESS,不知道是那里的错误,请求高手指点下.
我的代码如下: @ECHO OFF FOR /F %%I IN ('FINDSTR /I "ACCESS" "%TEMP%"\CheckV.TXT') DO ( SET ACCESS=%%I IF /I NOT DEFINED I (SET ACCESS=NO) ) ECHO %ACCESS% PAUSE 其中CheckV.TXT的内容如下,这个文件的内容我是从一个网页文件中提取的(ACCESS运行的条件:主程序ACCESS,DAO ADO和JET及其版本): Jet4.0 DAO3.60 ADO2.80 ACCESS2003 [ Last edited by HUNRYBECKY on 2006-12-19 at 02:08 AM ] |
|
| 第2楼 ccwan | 发表于 2006-12-18 23:18 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
是否要定义的为ACCESS? |
|
| 第3楼 ccwan | 发表于 2006-12-18 23:27 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
好像有问题,存在ACCESS时没事,若找不到ACCESS就不行了。
|
|
| 第4楼 HUNRYBECKY | 发表于 2006-12-18 23:28 |
| 银牌会员 发帖 442 积分 1,179 | |
|
是呀,所以怎么解决这个问题呢.我怎么试验也不行.
|
|
| 第5楼 HUNRYBECKY | 发表于 2006-12-18 23:30 |
| 银牌会员 发帖 442 积分 1,179 | |
Originally posted by ccwan at 2006-12-18 23:27: 如果找到ACCESS行我就赋找到的值给ACCESS变量,否则赋变量NO给ACCESS变量. |
|
| 第6楼 redtek | 发表于 2006-12-18 23:44 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
当那个 Findstr 找不到 ACCESS 字符串时,那个 for 是取不出来结果的(空),
既然for取到的是0行内容,那么for中的语句不会被执行。 所以,for一想:“怎么一行内容都没有读到啊?喔……干脆我甭执行了,退出吧……”。 于是for以外(后面)的 Echo 就显示了一个未定义的变量:) [怎么知道for里面的语句没有执行?] 可以在那个For里面单独加一句: Echo 没执行 然后运行代码,如果Findstr找不到 “ACCESS” 字符串,上面这句是显示不出来的,就说明它没有执行。 (for /f 取不取内容再执行for里面的语句显然没有实际用处) [ Last edited by redtek on 2006-12-18 at 10:45 AM ] |
|
| 第7楼 ccwan | 发表于 2006-12-18 23:47 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
这样没问题了
|
|
| 第8楼 NaturalJ0 | 发表于 2006-12-18 23:52 |
| 银牌会员 发帖 533 积分 1,181 | |
|
find /i "access" && set access=access || set access=no
不知道能不能满足楼主的要求。 PS:“但是运用后这时则使用ECHO %ACCESS% 不能显示出改变量” 这是什么语法? |
|
| 第9楼 HUNRYBECKY | 发表于 2006-12-19 00:00 |
| 银牌会员 发帖 442 积分 1,179 | |
Originally posted by redtek at 2006-12-18 23:44: 分析的非常有道理.现在明白了,原来我钻进死牛角了,怎么也找不到这个 |
|
| 第10楼 HUNRYBECKY | 发表于 2006-12-19 00:07 |
| 银牌会员 发帖 442 积分 1,179 | |
Originally posted by NaturalJ0 at 2006-12-18 23:52: find在文件查找后回返回文件的路径和找到的字符串,所以使用FIND无法实现的,但是可以使用FINDSTR解决这个问题; access=access这个也是不行的.实际上我是查找包含ACCESS行的变量,如找到ACCESS97则ACCESS=ACCESS97,找到ACCESS2007则ACCESS=ACCESS2003,我的目的很明确就是为了检测ACCESS的版本问题; ECHO %ACCESS% 如果没有改ACCESS变量则显示不错,而显示回显关闭什么的. |
|
| 第11楼 HUNRYBECKY | 发表于 2006-12-19 00:22 |
| 银牌会员 发帖 442 积分 1,179 | |
Originally posted by ccwan at 2006-12-18 23:47: |
|
| 第12楼 ccwan | 发表于 2006-12-19 00:25 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
| 第13楼 HUNRYBECKY | 发表于 2006-12-19 00:27 |
| 银牌会员 发帖 442 积分 1,179 | |
|
问题已经解决,根据REDTEK兄弟的提示,修改为以下代码就OK了:
@ECHO OFF FOR /F "DELIMS=" %%I IN ('FINDSTR /I "ACCESS" %TEMP%\CheckV.TXT') DO ( IF NOT "%%I"=="" SET ACCESS=%%I) IF NOT DEFINED ACCESS SET ACCESS=NO ECHO %ACCESS% PAUSE 这里不能使用IF NOT DEFINED I SET ACCESS=NO 因为正如REDTEK兄弟所说的,变量I实际上是在FOR语句中,而DEFINED则是在FOR之外,所以开始用I不行,改为FOR就可以了 另外大家想想能否直接使用FINDSTR实现,关键点在于如何把FINDSTR返回的值赋给一个变量ACCESS. |
|
| 第14楼 HUNRYBECKY | 发表于 2006-12-19 00:29 |
| 银牌会员 发帖 442 积分 1,179 | |
Originally posted by ccwan at 2006-12-19 00:25: |
|
| 第15楼 redtek | 发表于 2006-12-19 01:56 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
另一种方法:
先赋值给 access=NO 然后再执行for读出那个你要的数据。假如就算 Findstr 没找到 "ACCESS" 也没关系,顶多 for 中 access 变量没被赋值。 但是,for之前已经被赋初值NO了,所以后面 FOR 不成功就是NO,如果成功找到了那么ACCESS=NO的原值会被FOR中的值取代~:) (多谢版主提醒,我也忘记加引号了,刚刚补上~:) [ Last edited by redtek on 2006-12-18 at 01:09 PM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |