标题: [文本处理] 批处理如何在把带有换行符的字符串输入到文件? [打印本页]
作者: genekiller 时间: 2012-6-15 11:05 标题: 批处理如何在把带有换行符的字符串输入到文件?
本人在编一个批处理时遇到问题,情况是这样的:
我要在每一个for循环都向一个名为softdata的变量加入数据和换行符(即set softdata=!softdata!"换行符"%%a)
循环结束后,把softdata输出到名为a.txt的文件里,打开这个文件,字符串里的换行符全被等效成换行(
即softdata里的内容:a"换行符"b"换行符"c"换行符"d"换行符"e,输出到文件后为:
a
b
c
d
e)
请各位大大帮帮我这个出来乍到的新人吧!!!
作者: forfiles 时间: 2012-6-15 18:19
找一个数据里面不会出现的字符来表示换行,最后输出的时候把这个字符替换一下就行了。
作者: genekiller 时间: 2012-6-15 20:23
回复 2# forfiles
如果按上楼的做法,应该会用到for 循环多次执行echo XX>>a.txt,可是这个效率太低,我需要一次把softdata导入到文件里
作者: forfiles 时间: 2012-6-15 20:24
回复 3# genekiller
不需要的。你贴代码出来吧,我帮你改。
作者: weichenxiehou 时间: 2012-6-15 22:17
回复 3# genekiller
既然知道用很多>>会降低效率,为什么不用一个?- (for ... %%a in (...) do (
- ...
- echo,%%a
- ))>a.txt
复制代码
作者: genekiller 时间: 2012-6-16 10:57
本帖最后由 genekiller 于 2012-6-16 11:05 编辑
我的目的其实是想只用一次echo命令把一串含有换行符的字符串导入到文件,而文件中的换行符等效成了换行
代码就不拿了,代码比较大有300行左右而且代码之间联系很深不能单独拿出来,而且不在我现在用的电脑上
话说楼上那个代码其实也是用了多次echo命令。
作者: CrLf 时间: 2012-6-16 12:14
回复 6# genekiller
如果通过 for /f 获取行内容,那么无解,因为 for /f 必然是以换行符为行分隔符的,可以改用 set /p 获取文本,因为它是以 crlf 或 lfcr 为分隔符的:- @echo off&setlocal enabledelayedexpansion
- (for /l %%a in () do (
- set /p str=
- rem 此处爱做啥做啥
- echo [!str!]
- ))<in.txt>out.txt
复制代码
或者用第三方 gawk:- gawk "BEGIN{RS=\"\r\"}{这里做点什么;print $0}" in.txt>out.txt
复制代码
作者: genekiller 时间: 2012-6-16 13:46
斑竹的办法不错,不过小人想斗胆问一下,斑竹的第一种方法是否是一次性导入文件里的吗?试验显示这个方法如果不加入循环次数便会无限循环,我需要它能根据输入文件里的行数自动循环,而不是无限循环,如果用斑竹的这种办法,我该在循环体中加入什么判断条件来退出循环呢?
作者: powerbat 时间: 2012-6-16 13:48
是我没理解还是你们理解错了?楼主好像是这个意思?复制代码
不要用%softdata%就行了,这种在预处理时会将换行符后面的内容截掉。
作者: CrLf 时间: 2012-6-16 17:02
回复 8# genekiller
那就:- @echo off&setlocal enabledelayedexpansion
- (for /l %%a in ('findstr /n .* in.txt') do (
- set /p str=
- rem 此处爱做啥做啥
- echo [!str!]
- ))<in.txt>out.txt
- rem 使用 findstr 是为了兼容文件中的空行,若无空行可以将 ('findstr /n .* a.txt') 改为 (a.txt)
复制代码
详见:http://bbs.bathome.net/thread-13327-1-1.html
也有别的方式来指定循环次数,需酌情选择
作者: genekiller 时间: 2012-6-16 19:47
本帖最后由 genekiller 于 2012-6-16 19:49 编辑
现在想起我的那个批处理,斑竹这个有一点不符合我那批处理的要求,那就是in.txt里的内容和out.txt内容的区别只有换行,而我的那个批处理会按照某一变量的值和in.txt里的内容而改变更改输出到out.txt的内容,比如:
in.txt的内容为:
a,b,c
d,e,f
g,h,i
而根据实际情况有可能输出
out.txt为: a,b,c
d,e,f
g,h,z
作者: 77七 时间: 2023-11-9 21:21
http://www.bathome.net/redirect.php?goto=findpost&;ptid=31373&pid=152207
- @echo off
- setlocal enabledelayedexpansion
- for /l %%l in (1,1,3) do (
- set str=%%l;!str!
- )
- >1.txt (echo %str:;=&echo;%)
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |