中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 22:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 读取源文件内容并输出至其他文件时如何保留空行
楼 主 读取源文件内容并输出至其他文件时如何保留空行 发表于 2008-04-25 17:54 ·  中国 北京 联通
初级用户
积分 124
发帖 34
注册 2006-05-23 11:38
UID 55845
状态 离线
需求是:
读取a.txt文件的内容, 并输出至b.txt.
a.txt 的内容如下:
[1111]:
[2222]

:[333]
[44444]

[5555]

666

请注意,.a.txt中包含了 : ] 等 字符, 在本论坛search了一下,没有找到一个reasonable solution,请教各位大牛,多谢
2 ^_^ 发表于 2008-04-25 18:38 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
先用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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
bat-zw +2 2008-04-25 20:51
3 发表于 2008-04-25 20:22 ·  中国 湖北 武汉 教育网
初级用户
积分 68
发帖 25
注册 2008-04-08 18:50
UID 115283
性别 男
状态 离线
学习一下,呵呵,高手啊
4 发表于 2008-04-25 20:22 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
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
5 发表于 2008-04-25 20:29 ·  中国 广东 江门 新会区 电信
初级用户
积分 29
发帖 15
注册 2008-04-23 20:23
UID 116742
性别 男
状态 离线
学习一下,学习一下
6 发表于 2008-04-25 23:48 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
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 递归过大。。
7 发表于 2008-04-25 23:53 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
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

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

[ Last edited by pusofalse on 2008-4-25 at 11:55 PM ]
8 发表于 2008-04-28 18:48 ·  中国 北京 联通
初级用户
积分 124
发帖 34
注册 2006-05-23 11:38
UID 55845
状态 离线
谢啦,同问setlocal 的问题,放到循环外边跟里边的区别在哪?
9 发表于 2008-04-29 00:32 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
UID 117003
性别 男
状态 离线
放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。

如果在此FOR语句以上还有SETLOCAL,放到外边就都结束了,你下边的环境设置就全变了。
10 发表于 2008-04-29 00:36 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
Originally posted by nipo at 2008-4-29 12:32 AM:
放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。

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

貌似有点没看懂我问的意思 我是问setlocal放循环里和循环外有何区别,并不是endlocal放里和放外有何区别。。。但同样谢谢你~!
11 发表于 2008-04-29 00:39 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
UID 117003
性别 男
状态 离线
呵呵,答非所问是吗?

道理其实不都一样吗?放到循环外相当于设置全局变量,放到里面,只是局部变量。起作用的范围不同。
12 发表于 2008-04-29 00:40 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
运行下面两段代码,你就能理解有什么区别了:

@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
13 发表于 2008-04-29 00:42 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
Originally posted by zw19750516 at 2008-4-29 12:40 AM:
运行下面两段代码,你就能理解有什么区别了:

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

谢谢~ 只是这一点区别吗?~
14 发表于 2008-04-29 00:49 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
UID 117003
性别 男
状态 离线
咱们一起学习吧(不包括zw19750516,他是老师)

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

http://www.cn-dos.net/forum/viewthread.php?tid=25570&fpage=0&highlight=&page=2

[ Last edited by nipo on 2008-4-29 at 01:00 AM ]
15 发表于 2008-04-29 01:00 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
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 ]

我也这样觉得
论坛跳转: