中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 读取源文件内容并输出至其他文件时如何保留空行
« [1] [2] »
作者:
标题: 读取源文件内容并输出至其他文件时如何保留空行 上一主题 | 下一主题
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『楼 主』:  读取源文件内容并输出至其他文件时如何保留空行

需求是:
读取a.txt文件的内容, 并输出至b.txt.
a.txt 的内容如下:
[1111]:
[2222]  
  
:[333]  
[44444]  
  
[5555]  
  
666  

请注意,.a.txt中包含了 : ] 等 字符, 在本论坛search了一下,没有找到一个reasonable solution,请教各位大牛,多谢

2008-4-25 17:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 2 楼』:  ^_^

先用findstr读取出行数,包括空行,然后 echo.!str!>>b.txt

for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set str=%%a
   setlocal enabledelayedexpansion
   set str=!str:*:=!
   echo.!str!>>b.txt
)
pause

[ Last edited by pusofalse on 2008-4-25 at 06:44 PM ]

   此帖被 +2 点积分     点击查看详情   
评分人:【 bat-zw 分数: +2  时间:2008-4-25 20:51


2008-4-25 18:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
naughtypack
初级用户





积分 68
发帖 25
注册 2008-4-8
状态 离线
『第 3 楼』:  

学习一下,呵呵,高手啊

2008-4-25 20:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  

pusofalse进步很快啊,继续加油哈,
其实没其它要求的话还是这个最方便:
@echo off
type a.txt>b.txt
pause>nul
l

[ Last edited by zw19750516 on 2008-4-25 at 08:26 PM ]



批处理之家新域名:www.bathome.net
2008-4-25 20:22
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
106942397
初级用户




积分 29
发帖 15
注册 2008-4-23
状态 离线
『第 5 楼』:  

学习一下,学习一下

2008-4-25 20:29
查看资料  发送邮件  发短消息 网志  OICQ (106942397)  编辑帖子  回复  引用回复
bjsh
银牌会员





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



  Quote:
Originally posted by pusofalse at 2008-4-25 06:38 PM:
先用findstr读取出行数,包括空行,然后 echo.!str!>>b.txt

for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set str=%%a
   setlocal enabledelayedexpansion
  ...

改成这个
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set str=%%a
   setlocal enabledelayedexpansion
   set str=!str:*:=!
   echo.!str!>>b.txt
   endlocal
)
pause

不然文件一大 就导致 setlocal 递归过大。。

2008-4-25 23:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by bjsh at 2008-4-25 11:48 PM:


改成这个
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set str=%%a
   setlocal enabledelayedexpansion
   set str=!str:*:=!
   echo.!str!>>b.txt
   [color=Red ...

是!多谢指正!原本要写上的,但我看着a.txt中只有那几行。。。 而没有考虑代码通用性,我一贯的不足啊~
另外请教一下,把setlocal放在for之前和for之内有什么区别吗? 除了在for之内要用endlocal终止延迟之外~

[ Last edited by pusofalse on 2008-4-25 at 11:55 PM ]

2008-4-25 23:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『第 8 楼』:  

谢啦,同问setlocal 的问题,放到循环外边跟里边的区别在哪?

2008-4-28 18:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
nipo
中级用户





积分 228
发帖 106
注册 2008-4-26
状态 离线
『第 9 楼』:  

放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。

如果在此FOR语句以上还有SETLOCAL,放到外边就都结束了,你下边的环境设置就全变了。

2008-4-29 00:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by nipo at 2008-4-29 12:32 AM:
放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。

如果在此FOR语句以上还有SETLOCAL,放到外边就都结束了,你下边的环境设置就全变了。

貌似有点没看懂我问的意思 我是问setlocal放循环里和循环外有何区别,并不是endlocal放里和放外有何区别。。。但同样谢谢你~!

2008-4-29 00:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nipo
中级用户





积分 228
发帖 106
注册 2008-4-26
状态 离线
『第 11 楼』:  

呵呵,答非所问是吗?

道理其实不都一样吗?放到循环外相当于设置全局变量,放到里面,只是局部变量。起作用的范围不同。

2008-4-29 00:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  

运行下面两段代码,你就能理解有什么区别了:
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,33) do (
    set str=%%i
    echo !str!
)
pause>nul

@echo off
for /l %%i in (1,1,33) do (
    setlocal enabledelayedexpansion
    set str=%%i
    echo !str!
)
pause>nul




批处理之家新域名:www.bathome.net
2008-4-29 00:40
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-4-29 12:40 AM:
运行下面两段代码,你就能理解有什么区别了:
[code]
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,33) do (
    set str=%%i
    echo !str!
)
pause>nul ...

谢谢~ 只是这一点区别吗?~

2008-4-29 00:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nipo
中级用户





积分 228
发帖 106
注册 2008-4-26
状态 离线
『第 14 楼』:  

咱们一起学习吧(不包括zw19750516,他是老师)

http://www.cn-dos.net/forum/viewthread.php?tid=21322

http://www.cn-dos.net/forum/view ... ghlight=&page=2

[ Last edited by nipo on 2008-4-29 at 01:00 AM ]

2008-4-29 00:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by nipo at 2008-4-29 12:49 AM:
咱们一起学习吧(不包括zw19750516,他是老师)

http://www.cn-dos.net/forum/viewthread.php?tid=21322

[ Last edited by nipo on 2008-4-29 at 12:50 AM ]

我也这样觉得

2008-4-29 01:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: