中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在批处理中实现对文本文档的每一行开头或者末尾加入
作者:
标题: 如何在批处理中实现对文本文档的每一行开头或者末尾加入 上一主题 | 下一主题
liuwei723
新手上路





积分 18
发帖 5
注册 2006-4-26
状态 离线
『楼 主』:  如何在批处理中实现对文本文档的每一行开头或者末尾加入

我想在一个文本文档的每一行的开头和结尾加上特定的字符串,请问如何实现?

[ Last edited by liuwei723 on 2006-4-26 at 15:09 ]

2006-4-26 15:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 2 楼』:  

dos下,好像这个只有用第三方工具。 vbs的倒好容易。

我以前都是用change.exe来处理文字替换,行首插入稍微麻烦一点

2006-4-28 00:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 3 楼』:  

DOS下倒是可以试试lmod工具来实现,比如说:

type in.txt | lmod start [] end > out.txt

这样就可以在in.txt中每行的开头和结尾加入字符串,并将结果输入到out.txt



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2006-4-28 01:12
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 4 楼』:  

@echo off
setlocal enabledelayedexpansion
set mm=%1
set /p start=输入每行开头要添加的字符串:
set /p end=输入每行结为要添加的字符串:
for /f "tokens=1,2* delims=:" %%i in ('findstr /n . %mm%') do echo ^!start^!%%j^!end^! >>22.txt
endlocal
前几天看过无奈何兄的那个前后加符号的回帖,上面的可以过滤空白行,不过生成的文件把以前的空白行删除了,不知道空白行对楼主有用还是没用,还有就是对于" & <"这些字符的处理问题,ECHO命令是不能直接写入生成的,所以需要用^前导字符来进行显示,如果楼主没有其他要求,这个应该差不多也许大概应该可以完成基本的使用了!!!!!!!!

2006-4-28 11:44
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
liuwei723
新手上路





积分 18
发帖 5
注册 2006-4-26
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by bagpipe at 2006-4-28 11:44:
@echo off
setlocal enabledelayedexpansion
set mm=%1
set /p start=输入每行开头要添加的字符串:
set /p end=输入每行结为要添加的字符串:
for /f "tokens=1,2* delim ...

呵呵,谢谢。几位兄弟给我写的代码,我都仔细研究过,总算可以达到要求了。
以前由于对批处理接触的少,所以这方面就不太了解,研究了两天,总算学到了些东西,对批处理有了进一步的了解。现在就是对FOR和SET没有完全搞明白。其帮助文件说的也不太明白,而对于这方面的一些讨论,大多也只有怎么写代码,没有解释其含义的。不知谁能够提供给我一个好点的东西,可以再深层学习一下。

2006-4-28 19:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 6 楼』:  

http://www.cn-dos.net/forum/view ... ighlight=%2Bbagpipe
论坛中好像很多介绍命令的,自己好好看看,主要是对实践一下,上面的也许对你有帮助

2006-4-30 12:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
liuwei723
新手上路





积分 18
发帖 5
注册 2006-4-26
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by bagpipe at 2006-4-30 12:37:
http://www.cn-dos.net/forum/view ... ighlight=%2Bbagpipe
论坛中好像很多介绍命令的,自己好好看看,主要是对实践一下,上面的 ...

呵呵,谢谢~后来我专门把for仔细研究了一下,做了些实践,总算把for的几个参数搞明白是怎么回事。这篇文章真的不错,早看我就早点明白了,收藏下拉,呵呵。

2006-4-30 17:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
khw
新手上路





积分 10
发帖 5
注册 2006-5-2
状态 离线
『第 8 楼』:  

我想在一個文本文檔的每一字後面加上特定的字符串,請問如何實現?

如:
可愛的太陽啊
微微的春風吹
變成:
可-愛-的-太-陽-啊-
微-微-的-春-風-吹-


求各位高手幫忙處理!!!!

2006-5-2 01:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

Re khw:
如果纯粹地用批处理来解决的在效率以及容错上面不是很理想,而且相对比较繁琐,建议用vbs解决:
    SFile = GetFileName()
    Msg = "替换字符格式为:" & vbtab & "str1:=str2" & vblf
    Msg = Msg & "省略str2可以删除str1"
    Str = inputbox(Msg,"输入要插入的字符:")
    if len(Str) = 0 then Wscript.Quit

'先把文件读到StrOld中,然后把处理后的字符串StrNew写回到文件
with CreateObject("Scripting.FileSystemObject")
    set F = .OpenTextFile(SFile,1,True)
        StrOld = F.ReadAll
    set F = Nothing
    set F = .OpenTextFile(SFile,2,True)
        if len(Str) > 1 and instr(Str,":=") then
            StrArray = split(Str,":=")
            StrNew = Replace(StrOld,StrArray(0),StrArray(1))
        else
            StrNew = InertStr()
        end if
        F.Write(StrNew)
end with

'插入字符函数,依次读入每个字符并判断是否为空格,回车,换行
Function InertStr()
    for i = 1 to len(StrOld)
        if mid(StrOld,i,1) = space(1) or _
            asc(mid(StrOld,i,1)) = 13 or _
            asc(mid(StrOld,i,1)) = 10 then

            strTmp = strTmp & mid(StrOld,i,1)
        else
            strTmp = strTmp & mid(StrOld,i,1) & Str
        end if
    next
    InertStr = strTmp
End Function

'获得被操作文件名
Function GetFileName()
    if WScript.Arguments.Count <> 0 Then
            GetFileName = Wscript.Arguments(0)
    else
        with CreateObject("UserAccounts.CommonDialog")
            .Filter = "文本文件|*.txt|所有文件|*.*"
            .ShowOpen
            GetFileName = .Filename
        end with
    end if
        if len(trim(GetFileName)) = 0 then Wscript.Quit
End Function
保存为 字符处理.vbs  后把要处理的文件拖到它上面或直接双击运行都可以,在弹出的对话框中输入你想插入的符号。
不光可以插入符号,还可以删除和替换符号,具体不足之处自己看着改改吧,windows xp pro sp2下测试通过。
ps:建议单独的问题单独发一个贴。

2006-5-2 08:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
khw
新手上路





积分 10
发帖 5
注册 2006-5-2
状态 离线
『第 10 楼』:  

3742668版主您好 :

我已測試ok,非常感謝您的詳細解答,真是佩服佩服!

khw

2006-5-2 14:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 11 楼』:  

收下脚本.

2006-5-2 18:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 12 楼』:  

这个问题sed 解决最好,我感觉~任何字符都经过测试,一句话就可以

sed "s/^/\/span>/;s/\x24/\/span>/" test.txt

sed下载:http://www.student.northpark.edu/pemente/sed/gsed407x.zip

2006-11-4 07:21
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 13 楼』:  

在批处理中,对于空行的问题,似乎可以这样解决:
将原来的for /f "tokens=1,2* delims=:" %%i in ('findstr /n . 1.txt')
改成for /f "tokens=1,2* delims=:" %%i in ('findstr /n .* 1.txt')

@echo off
setlocal enabledelayedexpansion
set /p start=输入每行开头要添加的字符串:
set /p end=输入每行结为要添加的字符串:
for /f "tokens=1,2* delims=:" %%i in ('findstr /n .* 1.txt') do echo ^!start^!%%j^!end^!>>22.txt
pause>nul

2006-11-4 09:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suli2921
新手上路





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



  Quote:
Originally posted by vkill at 2006-11-4 07:21 AM:
这个问题sed 解决最好,我感觉~任何字符都经过测试,一句话就可以

sed "s/^/\/span>/;s/\x24/\/span>/" test.txt

sed下载:[url]http://www.student.northpark ...

替换的内容能写到原来的文件中吗?
我试了一下,只能在命令行窗口中显示,
不会用 sed,还望指教。

2007-7-5 15:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 15 楼』:  

现在的sed 有个 -i 选项 可以直接作用于 源文件;

实际上 是它自动替你完成了 重定向到临时文件 然后 替换文件的操作.


lz的问题 在vim 里的 可视化块 操作里 瞬间就可以完成;

选个好的编辑器 要省时省力的多啊

2007-7-5 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: