中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:关于文本文件中特定字符的判断问题。
作者:
标题: 请教:关于文本文件中特定字符的判断问题。 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  请教:关于文本文件中特定字符的判断问题。

有一文本文件,hdmini.txt,其格式如下,我想判断此文件中是否有1:7。

N:N    DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEM  LABEL       TOTALmb FREEmb
1:1  = C:  C:  PRIMARY YES NO   0B FAT32        NO NAME     7538    3663   
1:2  = E:      PRIMARY NO  YES  17 NTFS/HPFS                7467    0      
1:3  = F:  D:  LOGICAL NO  NO   07 NTFS/HPFS                10001   7161   
1:4  = G:  E:  LOGICAL NO  NO   07 NTFS/HPFS                15005   7122   
1:5  = D:  F:  LOGICAL NO  NO   0B FAT32        APPZ        30004   15073  
1:6  = H:  G:  LOGICAL NO  NO   07 NTFS/HPFS                44453   16354  


我用了两种处理方法,请教为何第二种不行?错在哪里?谢谢。


rem 方法1:
set act=1:7
  For /f "tokens=1" %%i In ('type hdmini.txt ^| find "%act%"') do (
          if errorlevel=0 goto sub_018
  )
cls
Echo ------------------------------------------------
echo.
echo  警告:自定义分区号"%act%"不存在,需重新输入。
echo.
Echo ------------------------------------------------
echo.
pause

******************************************************
rem 方法2:
set act=1:7
type hdmini.txt ^| find "%act%" >nul
if errorlevel=0 goto sub_018

cls
Echo ------------------------------------------------
echo.
echo  警告:自定义分区号"%act%"不存在,需重新输入。
echo.
Echo ------------------------------------------------
echo.
pause

×××××××××××××××××××××××××
我试了一下,改成下面这样就行了。原因不明。
-----------------------------------
@echo off
set act=1:7
find "%act%" hdmini.txt >nul
if not errorlevel 1 goto sub_018

cls
Echo ------------------------------------------------
echo.
echo  警告:自定义分区号"%act%"不存在,需重新输入。
echo.
Echo ------------------------------------------------
echo.
pause
goto exit

:sub_018
echo ok
pause

:exit

[ Last edited by lianjiang2004 on 2007-6-6 at 06:45 PM ]



Windows 一键还原
http://www.yjhy.com
2007-6-6 17:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 2 楼』:  

type hdmini.txt ^| find "%act%" >nul
if errorlevel=0 goto sub_018

两个错误:

一、hdmini.txt后没必要加^。完全可以find "%act%" hdmini.txt


二、if errorlevel=0没有这种用法。应该是if errorlevel 0

2007-6-6 18:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 3 楼』:  

谢谢,我试试看。我的^是依葫芦画瓢画的,呵呵。



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 4 楼』:  

没if errorlevel=0的用法吗?那我的方法1里用了,是能通过的。
基础差,我再查查,呵呵。



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 5 楼』:  

按你的改法,测试通不过。



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 6 楼』:  

怎么通不过??

出现什么错误?

2007-6-6 18:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 7 楼』:  

就是说结果应是没有。可是运行后却是有。



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 8 楼』:  

我试了一下,改成下面这样就行了。原因不明。
-----------------------------------
@echo off
set act=1:7
find "%act%" hdmini.txt >nul
if not errorlevel 1 goto sub_018

cls
Echo ------------------------------------------------
echo.
echo  警告:自定义分区号"%act%"不存在,需重新输入。
echo.
Echo ------------------------------------------------
echo.
pause
goto exit

:sub_018
echo ok
pause

:exit



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 9 楼』:  


rem 方法2:
@echo off
set act=1:7
type hdmini.txt | find "%act%" >nul
if %errorlevel%==0 goto sub_018

cls
Echo ------------------------------------------------
echo.
echo  警告:自定义分区号"%act%"不存在,需重新输入。
echo.
Echo ------------------------------------------------
echo.
pause
exit

:sub_018
echo 自定义分区号"%act%"存在
pause


   此帖被 +5 点积分      点击查看详情   
评分人:【 lianjiang2004 分数: +5  时间:2007-6-6 18:57


2007-6-6 18:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 10 楼』:  

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               指定只有条件为 false 的情况下, Windows XP 才
                    应该执行该命令。

  ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                    指定数字的退出编码,指定条件为 true。


  string1==string2  如果指定的文字字符串匹配,指定条件为 true。

  EXIST filename    如果指定的文件名存在,指定条件为 true。

2007-6-6 18:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 11 楼』:  

9楼代码通过,谢谢。



Windows 一键还原
http://www.yjhy.com
2007-6-6 18:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: