中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]for /F问题:如何任意选取某行内容进行操作呢?
作者:
标题: [已结]for /F问题:如何任意选取某行内容进行操作呢? 上一主题 | 下一主题
blancy
初级用户




积分 33
发帖 23
注册 2009-2-17
状态 离线
『楼 主』:  [已结]for /F问题:如何任意选取某行内容进行操作呢?

我有一个txt文件,内容是:
a
b
j
d
m
f
g
请问用for /F 有没有什么办法对第1,3,5,7行操作,即可以任意选取某行内容进行操作呢?
多谢!

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2009-02-18]在帖子标题中增加搜索关键字
说明:原标题"for /F问题"不利于论坛搜索
处罚:扣除2点积分
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{27314}反面教材:本论坛“精彩”标题小集
{32667}愤怒:那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────


[ Last edited by blancy on 2009-2-20 at 11:32 ]

   此帖被 -2 点积分    点击查看详情   
评分人:【 HAT 分数: -2  时间:2009-2-18 13:36




新手上路,请多关照
2009-2-18 12:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『第 2 楼』:  tokens=。。。。

@echo off
findstr  /n . d:\ ff.txt ^
> d:\my.txt
for /f "tokens=*  " %%1 in ^
('findstr /c:1 /c:3 /c:5 .*  d:\my.txt') ^
do echo %%1

ff.txt 内容
-------------------------------

a
b
j
d
m
f
g
--------------------



方法2:
@echo off
for /f "tokens=*  " %%1 in ('findstr /n  .*   d:\ff.txt') ^
do echo  %%1 |findstr /c:1 /c:3 /c:5

[ Last edited by 5yue5 on 2009-2-20 at 13:12 ]

2009-2-18 12:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
blancy
初级用户




积分 33
发帖 23
注册 2009-2-17
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by 5yue5 at 2009-2-18 12:48:
.........

单独使用tokens好像不行吧,我记得必须配合delims使用
但我这个文件每个字符都是换行后输入的



新手上路,请多关照
2009-2-18 14:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in (1.txt) do (
        set /a a+=1
        echo !a!|findstr /c:"1" /c:"3" /c:"5" /c:"7"&&echo %%i

)

pause




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-18 15:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 5 楼』:  


@echo off
set file=a.txt
setlocal enabledelayedexpansion
(
  for /f "usebackq delims=" %%a in ("%file%") do (
    set /a n+=1
    if !n!==1 (
      echo 第一行
    ) else if !n!==3 (
      echo 第三行
    ) else if !n!==5 (
      echo 第五行
    ) else if !n!==7 (
      echo 第七行
    ) else echo %%a
  )
) > _tmp
move _tmp "%file%"
[ Last edited by tireless on 2009-2-18 at 17:54 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 blancy 分数: +1  时间:2009-2-23 16:03


2009-2-18 17:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
blancy
初级用户




积分 33
发帖 23
注册 2009-2-17
状态 离线
『第 6 楼』:  

非常感谢tireless
有几个地方以前没用过,麻烦您解释一下好么?
1. setlocal enabledelayedexpansion
是做什么用的,必须要用吗?
2.usebackq是做什么用的,必须要用吗?看了DOS帮助,但是没看懂
3. if !n!==1 ...两个“!”表示什么



新手上路,请多关照
2009-2-19 14:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 7 楼』:  Re 6楼

建议以后先搜索(论坛或Google)!

1. 什么情况下该使用变量延迟?
  简析环境变量和变量延迟特殊字符以及中介法的微妙关系

2. 论坛搜索 usebackq

...

2009-2-19 14:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
blancy
初级用户




积分 33
发帖 23
注册 2009-2-17
状态 离线
『第 8 楼』:  

十分+非常感谢
DOS深奥之面容,我又窥见了一小斑啊



新手上路,请多关照
2009-2-19 16:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  Re 8楼

如果有人帮你解决了问题,建议进行以下操作:

1、修改帖子标题,在标题最前面注明:[已结]

2、给正确回答问题者加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。

3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。



2009-2-19 17:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: