中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [再次求助]新手请教批处理修改文本文件内容问题
作者:
标题: [再次求助]新手请教批处理修改文本文件内容问题 上一主题 | 下一主题
caiyiqun
初级用户





积分 25
发帖 11
注册 2007-4-3
状态 离线
『楼 主』:  [再次求助]新手请教批处理修改文本文件内容问题

如偶一个文件,内容为(不括引号)" ABCDEFGHH   PPP  EGFAFDAF"
我要查找PPP并删除PPP和其后面的全部内容,没找到就跳过!

如何搞定?

先谢谢了!再次厚着脸皮发帖了!:P

2007-5-3 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qasa
高级用户




积分 959
发帖 311
注册 2006-4-11
来自 广东-LianJiang
状态 离线
『第 2 楼』:  


假设你那个文件为1.txt
for /f "tokens=1 delims=PPP" %%i in (1.txt) do (
    echo %%i >2.txt
    )




κχυμγνξοθπρωψιαδλεηφβτζσ┬╀┾┳┞┯┰┱┣┲┳╂╁│├┟┭┠这是什么??这就是我的人生
2007-5-3 22:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caiyiqun
初级用户





积分 25
发帖 11
注册 2007-4-3
状态 离线
『第 3 楼』:  

谢谢!!
但是当文件有回车苻时,只能输出回车前那一行,后面的里都不能输入到2.txt中

如内容为(不括引号)" ABCDEFGHH
                               44
                                   PPP
                                 EGFAFDAF"
只能输出第一行!!
如何改进?

2007-5-4 14:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caiyiqun
初级用户





积分 25
发帖 11
注册 2007-4-3
状态 离线
『第 4 楼』:  

FOR 命令好深呀,不懂,正在努力学习中

2007-5-4 14:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

效率比较低。
@echo off
for /f "delims=" %%a in (1.txt) do (
        echo %%a|find /i "PPP" >nul 2>&1 && set str=batchering
        if not defined str echo\%%a>>11.txt
)
start 11.txt


2007-5-4 17:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caiyiqun
初级用户





积分 25
发帖 11
注册 2007-4-3
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by lxmxn at 2007-5-4 04:27 AM:
效率比较低。[code]

@echo off
for /f "delims=" %%a in (1.txt) do (
        echo %%a|find /i "PPP" >nul 2>&1 && set str=batchering
        if not defined str echo\ ...

没话说,服了!!棒!

2007-5-4 20:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caiyiqun
初级用户





积分 25
发帖 11
注册 2007-4-3
状态 离线
『第 7 楼』:  

再问下,如果是删除 PPP 之前的全部文本,包括空格回车之类的,要怎么改?

2007-5-4 21:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chuier
新手上路




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



  Quote:
Originally posted by qasa at 2007-5-3 10:47 PM:

假设你那个文件为1.txt
for /f "tokens=1 delims=PPP" %%i in (1.txt) do (
    echo %%i >2.txt
    )

能帮我看看我写的这段么?
@echo off
setlocal enabledelayedexpansion
set F=1.txt
set "F=%F:"=%"
for %%i in ("%F%") do set F=%%~fi
set a=PPP
set b=
for /f "delims=" %%i in ('type "%F%"') do (
    set str=%%i
    set "str=!str:%a%=%b%!"
    echo !str!>>"%F%"_new.txt
)
为什么显示的是"ECHO is off."



chuier
2007-5-5 21:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by chuier at 2007-5-5 21:45:
能帮我看看我写的这段么?
@echo off
setlocal enabledelayedexpansion
set F=1.txt
set "F=%F:"=%"
for %%i in ("%F%") do set F=%%~fi
set a=PPP
set b=
for /f  ...

第一个for里面的%F%代表的是一个文件,如果没有这个文件,%%~fi 也会扩展它的全路径,最后导致第二个for命令可能因为找不到文件而退出。最好用 for /f %%a in ('dir %F%') do …… 的形式,来判断是不是有%F%这个文件。

我测试的时候是正常的,可以替换,但是总的来说,这个批处理不够严谨。

另外,提醒一下,新问题单独发个主题出来。

2007-5-6 16:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chuier
新手上路




积分 8
发帖 3
注册 2007-5-4
状态 离线
『第 10 楼』:  能详细解释一下么?

提问:
1 for /f "delims=" %%a in (1.txt) do (echo %%a|find /i "PPP" >nul 2>&1)命令中">&1"怎么理解?
2 set str=batchering什么含义?

等待答复............



chuier
2007-5-6 19:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  

Re chuier:

1、将句柄2(StdErr)的输出定向到句柄1的输入中,而句柄1的输入又被输出到空设备(Nul)了,所以 “2>&1” 可以屏蔽命令的错误输出(StdErr),类似于 2>nul ;

2、这里定义一个 str 是为 if not defined str 语句服务的,表示如果没有定义 str 变量的话,就执行后面的命令。

简单的解释这点了,想要详细了解它们的用法,可以搜索一下论坛相关的讨论。

2007-5-6 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jinrich
初级用户




积分 26
发帖 11
注册 2006-12-15
状态 离线
『第 12 楼』:  re

for /f "tokens=1 delims=PPP" %%i in (1.txt) do (
    echo\%%i >>2.txt
    )

  比较简单,只不过qasa的 echo %%i 〉2.txt  应改成echo\%%i >>2.txt



Just does it;I lov bat
2007-5-6 20:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by jinrich at 2007-5-6 20:58:
for /f "tokens=1 delims=PPP" %%i in (1.txt) do (
    echo\%%i >>2.txt
    )

  比较简单,只不过qasa的 echo %%i 〉2.txt  应改成echo\%%i >>2.txt

这个不行,只能读取字符 P 前面的字符,不能处理 PPP 前面的字符。

2007-5-6 22:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
a201
新手上路





积分 2
发帖 1
注册 2007-3-2
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by caiyiqun at 2007-5-3 10:31 PM:
如偶一个文件,内容为(不括引号)" ABCDEFGHH   PPP  EGFAFDAF"
我要查找PPP并删除PPP和其后面的全部内容,没找到就跳过!

如何搞定?

先谢谢了!再次厚着脸皮发帖了!:P

那如果把PPP改为AAA如何改?保留后面全部内容

[ Last edited by a201 on 2007-5-8 at 04:27 AM ]

2007-5-8 04:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: