中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: for循环嵌套中skip的参数问题 上一主题 | 下一主题
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『楼 主』:  for循环嵌套中skip的参数问题

我的意思是:
依次忽略前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=后面能不能使用变量
怎么解决?

2007-9-13 15:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 2 楼』:  

即使加了
setlocal enabledelayedexpansion

也没有用

2007-9-13 15:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ThinKing
中级用户





积分 471
发帖 207
注册 2007-5-3
状态 离线
『第 3 楼』:  

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
)


   此帖被 +4 点积分      点击查看详情   
评分人:【 scriptor 分数: +4  时间:2007-9-13 16:22


2007-9-13 16:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by ThinKing at 2007-9-13 16:04:
try this:
[code]
@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嵌套中用
呵呵,不过还是我错了

谢谢了
代码没有错误!
我得对照一下我的为什么错了
呵呵.....

2007-9-13 16:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 5 楼』:  

To: Thinking
给你加分吧!
呵呵....

2007-9-13 16:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 6 楼』:  

再补充下:

最好是能在for的嵌套中解决这个问题
call  和 goto 跳来跳去的
就涉及到代码段位置的安排了

2007-9-13 16:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ThinKing
中级用户





积分 471
发帖 207
注册 2007-5-3
状态 离线
『第 7 楼』:  

换个思路也可达到目的:
@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


   此帖被 +2 点积分     点击查看详情   
评分人:【 scriptor 分数: +2  时间:2007-9-13 20:35


2007-9-13 19:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by ThinKing at 2007-9-13 19:43:
换个思路也可达到目的:
[code]@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倍

哈哈...
不过技术上来讲
这个要多一点

2007-9-13 20:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 9 楼』:  

再给你加分吧
嗯.....

2007-9-13 20:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: