中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用for 指定文件内容读取次数与定位?
楼 主 如何用for 指定文件内容读取次数与定位? 发表于 2007-03-16 23:45 ·  IANA 局域网IP(Private-Use)
中级用户
★★
积分 379
发帖 95
注册 2003-07-17 00:00
UID 7038
性别 男
状态 离线
每次取三个内容进行逻辑比较,行就退出不行就继续!
如:1-100,每次比较完不能重复!这只是一个例子,实际是从文件中提取的所以长度之前是不知道!

[ Last edited by peterdocter on 2007-3-17 at 01:40 AM ]
2 发表于 2007-03-16 23:46 ·  IANA 局域网IP(Private-Use)
中级用户
★★
积分 379
发帖 95
注册 2003-07-17 00:00
UID 7038
性别 男
状态 离线
bat中有没有数组功用?我是说CMD批处理!

[ Last edited by peterdocter on 2007-3-16 at 11:51 PM ]
3 发表于 2007-03-17 00:11 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
意思没明白
例子没看懂
BAT 没有直接提供数组功能,也许你可以自己写个出来用用。
4 发表于 2007-03-17 01:12 ·  IANA 局域网IP(Private-Use)
中级用户
★★
积分 379
发帖 95
注册 2003-07-17 00:00
UID 7038
性别 男
状态 离线
就是这样
test.txt:
1
2
3
4
5
6
7
8
9
10
...
从test.txt中先取三个数字
1
2
3
进行逻辑比较if之类,通过就跳循环否则就继续
再从test.txt再提取后面三个数字
4
5
6
一直到合乎逻辑判断或者test.txt的内容全部比较完为止。
就是一句话:“满足条件就停止,不足就继续到用完为止而且每次判断的内容不能重复!”
如果支持数组就很好办,只要对此数组变量进行循环与逻辑判断不用再读取文件就不会有重复内容的出现。就是不知道如何在CMD做到相当于此功能,把所有内容一次性全部读出来进行逻辑判断?
5 发表于 2007-03-17 01:14 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
还是用 sed 好了
6 发表于 2007-03-17 01:14 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
你连你的要求都没有说清楚
7 发表于 2007-03-17 01:32 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
根不用说模糊的题目了

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
8 发表于 2007-03-17 01:34 ·  IANA 局域网IP(Private-Use)
中级用户
★★
积分 379
发帖 95
注册 2003-07-17 00:00
UID 7038
性别 男
状态 离线
sed 只是文件处理工具吗?
现在的问题这个for命令如何写了?是用到嵌套吗?
我想就应该是两个for语句
第一个for用于文件读取
第二个for用于逻辑比较 if xxx = ??? && goto exit_it
就是不知道如何实现每次取三个内容进行比较不合乎就继续,再取三个内容再进行比较直到合乎或没有内容时就退出!现在最大问题也就是每次取三个内容,而且要过滤重复的内容就是之前用过1,2,3再比较时4,6,5....

[ Last edited by peterdocter on 2007-3-17 at 01:36 AM ]
9 发表于 2007-03-17 01:48 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by peterdocter at 2007-3-17 01:34:
sed 只是文件处理工具吗?
现在的问题这个for命令如何写了?是用到嵌套吗?
我想就应该是两个for语句
第一个for用于文件读取
第二个for用于逻辑比 ...


set n=0
:loop
for /f "skip=n ........

set/a n+=1
if ... goto end
goto loop
:end


剩下的自己写了
10 发表于 2007-03-17 02:24 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
UID 68504
性别 男
来自 湖南==》广东
状态 离线
试下以下代码看是否能满足你的要求:


@echo off
setlocal enabledelayedexpansion

set/a T=0
for /l %%i in (1 1 100) do (
set flag=!T!
echo 每三行的内容:
call :ReadFile !T!
echo.
pause>nul
if !Flag! EQU !T! echo 文件读完了 & pause>nul & goto :eof
)

pause>nul

:ReadFile
set/a T=%1
if %T% equ 0 (set "CMDLine=delims=") else set "CMDLine=skip=%T% delims="
for /f "%CMDLine%" %%i in (test.txt) do (
set/a T+=1
echo %%i
set/a flag=!T! %% 3
if !flag! EQU 0 goto :eof
)
11 发表于 2007-03-17 07:15 ·  IANA 局域网IP(Private-Use)
中级用户
★★
积分 379
发帖 95
注册 2003-07-17 00:00
UID 7038
性别 男
状态 离线
Originally posted by youxi01 at 2007-3-17 02:24 AM:
试下以下代码看是否能满足你的要求:


@echo off
setlocal enabledelayedexpansion

set/a T=0
for /l %%i in (1 1 100) do (
set flag=!T!
echo 每三行的内容:
...

多谢了!不过有一点不美的就是自动限制文件最后长度或叫行数!不过非常多谢你,原来延迟变量还是可以这样用!:lol:
论坛跳转: