中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 23:29
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » for循环嵌套中skip的参数问题
楼 主 for循环嵌套中skip的参数问题 发表于 2007-09-13 15:56 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
我的意思是:
依次忽略前1,2,....,6行,将文件的内容输出
文件a.txt:
abc
123
name
haha
ddd
sdw
erw
332,l.
a asdfe

我要的结果是
skip=1时, 只输出123
skip=2时, 只输出name
......
skip=6时, 只输出erw


脚本如下:

for /l %%a in (1,1,6) do (
for /f "delims= skip=%%a" %%b in (a.txt) do (
echo %%b
)
)



问题是,这个脚本执行不了
提示为:
此时不能有%a"

我想了很久
搜索查看了论坛的帖子
还是无解

那位能解释一下
for循环嵌套中的skip=后面能不能使用变量
怎么解决?
2 发表于 2007-09-13 15:57 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
即使加了
setlocal enabledelayedexpansion

也没有用
3 发表于 2007-09-13 16:04 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
UID 87369
性别 男
状态 离线
try this:

@echo off
for /l %%a in (1,1,6) do call :skip_ %%a
pause&exit/b

:skip_
for /f "delims= skip=%1" %%b in (a.txt) do (
echo %%b && goto :eof
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
scriptor +4 2007-09-13 16:22
4 发表于 2007-09-13 16:21 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Originally posted by ThinKing at 2007-9-13 16:04:
try this:

@echo off
for /l %%a in (1,1,6) do call :skip_ %%a
pause&exit/b

:skip_
for /f "delims= skip=%1" %%b in (a.txt) do (
echo %%b && goto :eof
...


好了
这个很好啊


其实我也用过这个技术
不知道哪里错了
所以
我又回到原始的想法
只在for嵌套中用
呵呵,不过还是我错了

谢谢了
代码没有错误!
我得对照一下我的为什么错了
呵呵.....
5 发表于 2007-09-13 16:22 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
To: Thinking
给你加分吧!
呵呵....
6 发表于 2007-09-13 16:31 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
再补充下:

最好是能在for的嵌套中解决这个问题
call 和 goto 跳来跳去的
就涉及到代码段位置的安排了
7 发表于 2007-09-13 19:43 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
UID 87369
性别 男
状态 离线
换个思路也可达到目的:
@echo off
for /l %%a in (1,1,6) do (
for /f "delims=" %%b in ('more +%%a a.txt') do (
if not defined a echo %%b&&set a=thinking
)
set a=
)
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
scriptor +2 2007-09-13 20:35
8 发表于 2007-09-13 20:34 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Originally posted by ThinKing at 2007-9-13 19:43:
换个思路也可达到目的:
@echo off
for /l %%a in (1,1,6) do (
for /f "delims=" %%b in ('more +%%a a.txt') do (
if not defined a echo %%b&&set a=thin ...


这个也可以
只是时间上要比你之前那个慢多了
同样一个文件
这个所花费的时间是之前那一个的40倍

哈哈...
不过技术上来讲
这个要多一点
9 发表于 2007-09-13 20:35 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
再给你加分吧
嗯.....
论坛跳转: