中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:关于文本文件中特定字符的判断问题。
楼 主 请教:关于文本文件中特定字符的判断问题。 发表于 2007-06-06 17:51 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
有一文本文件,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
2 发表于 2007-06-06 18:13 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
type hdmini.txt ^| find "%act%" >nul
if errorlevel=0 goto sub_018

两个错误:

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


二、if errorlevel=0没有这种用法。应该是if errorlevel 0
3 发表于 2007-06-06 18:17 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
谢谢,我试试看。我的^是依葫芦画瓢画的,呵呵。
Windows 一键还原
http://www.yjhy.com
4 发表于 2007-06-06 18:25 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
没if errorlevel=0的用法吗?那我的方法1里用了,是能通过的。
基础差,我再查查,呵呵。
Windows 一键还原
http://www.yjhy.com
5 发表于 2007-06-06 18:28 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
按你的改法,测试通不过。
Windows 一键还原
http://www.yjhy.com
6 发表于 2007-06-06 18:38 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
怎么通不过??

出现什么错误?
7 发表于 2007-06-06 18:44 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
就是说结果应是没有。可是运行后却是有。
Windows 一键还原
http://www.yjhy.com
8 发表于 2007-06-06 18:45 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
我试了一下,改成下面这样就行了。原因不明。
-----------------------------------
@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
9 发表于 2007-06-06 18:49 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
lianjiang2004 +5 2007-06-06 18:57
10 发表于 2007-06-06 18:50 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
IF ERRORLEVEL number command
IF string1==string2 command
IF EXIST filename command

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

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


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

EXIST filename 如果指定的文件名存在,指定条件为 true。
11 发表于 2007-06-06 18:56 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
9楼代码通过,谢谢。
Windows 一键还原
http://www.yjhy.com
论坛跳转: