中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 00:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]是否有方便的DOS和UNIX文件格式转换方法? 查看 1,513 回复 12
楼 主 [讨论]是否有方便的DOS和UNIX文件格式转换方法? 发表于 2008-01-10 14:13 ·  中国 上海 东方有线
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
其实我只需要UNIX到DOS的,也就是'\n' -> '\r\n'

借助sed,可以是用如下方式达到效果:

sed -e "s/$/\r/" myunix.txt > mydos.txt 




不过,我现在是想要问问,是否有更简单的方法,最好是不用第三方工具的。


原理我已经知道了,下面摘自:http://hi.baidu.com/dbsuit/blog/item/511eb409f9abe7266b60fba8.html


Windows/DOS与Unix文件格式之间的相互转换
2007-06-21 13:25

Windows/DOS与Unix文件格式是不同的

先搞清楚几个符号
*******************
0A LF ^J 换行
0D CR ^M 回车
*******************

DOS/Windows文本文件中使用CR(回车\r)和 LF(换行\n),
在文件的行尾的情况是是 '\r\n'

UNIX文本只使用换行符,在行的末尾有一个换行(\n),也就是'\n'
所以在windows下编辑的C程序放在unix下编译会出现"No end of newline"的Warning

两种文件格式之间的转化
Unix -> Dos
'\n' -> '\r\n'

//////////////////////////////////////////

while ( (ch = fgetc(in)) != EOF )
{
if ( ch == '\n' )
putchar('\r');
putchar(ch);
}

//////////////////////////////////////////

只要在Unix文件中出现的'\n'的之前加入一个'\r'字符就可以了

Unix <- DOS
'\n' <- '\r\n'

从Dos到Unix的情况复杂点,不能只是把从文件中读出的'\r'去掉就可以了
因为Dos文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。
所以在转换前要判断'\r'是否和'\n'同时出现。
如果同时出现,则去掉'\r'
如果没有同时出现,保留'\n'

//////////////////////////////////////////

cr_flag = 0; /* No CR encountered yet */
while ( (ch = fgetc(in)) != EOF )
{
if ( cr_flag && ch != '\n' ) {
/* This CR did not preceed LF */
putchar('\r');
}
if ( !(cr_flag = (ch == '\r')) )
putchar(ch);
}

//////////////////////////////////////////



[ Last edited by honghunter on 2008-1-10 at 02:15 PM ]
2 发表于 2008-01-10 15:53 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
3 发表于 2008-01-10 16:12 ·  中国 上海 东方有线
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
Originally posted by 不得不爱 at 2008-1-10 03:53 PM:
Unix -> Dos

type Unix.txt>dos.txt
就可以了


我这么做了,可是还是UNIX的啊,郁闷。
4 发表于 2008-01-10 16:40 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
5 发表于 2008-01-10 16:45 ·  中国 上海 东方有线
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
源文件中只有换行的,新文件变成“ECHO 处于打开状态。”了
6 发表于 2008-01-10 16:55 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
7 Unix to DOS 发表于 2008-01-10 17:00 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
more myunix.txt>mydos.txt
8 发表于 2008-01-10 20:54 ·  中国 上海 普陀区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
谢谢各位,我明天到公司再试试看。
9 发表于 2009-06-01 13:08 ·  中国 四川 成都 电信
初级用户
★★
积分 118
发帖 66
注册 2006-08-18 16:04
19年会员
UID 60797
性别 男
状态 离线
Originally posted by lxmxn at 2008-1-10 17:00:
more myunix.txt>mydos.txt


解决了困扰我很久的问题。谢谢版主

太神奇了不知道more有这个作用。

[ Last edited by weasel on 2009-6-2 at 06:47 ]
10 发表于 2010-07-19 20:56 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 8
发帖 8
注册 2010-07-17 21:27
16年会员
UID 170660
性别 男
状态 离线
Originally posted by weasel at 2009-6-1 13:08:


解决了困扰我很久的问题。谢谢版主

太神奇了不知道more有这个作用。

[ Last edited by weasel on 2009-6-2 at 06:47 ]



同理,如果是在unix系统中,使用more dosfile>unixfile,也可以将windows格式文本转换成unix格式文本。
11 Re 10 楼 发表于 2010-07-20 13:24 ·  新加坡
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
你在什么版本的Unix里面测试的?
12 发表于 2010-07-20 16:05 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 8
发帖 8
注册 2010-07-17 21:27
16年会员
UID 170660
性别 男
状态 离线
Originally posted by HAT at 2010-7-20 13:24:
你在什么版本的Unix里面测试的?



不是测试是使用。是sco unix5.0.5版本
13 Re 12 楼 发表于 2010-07-21 10:39 ·  新加坡
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
你真幸运,我在以下系统里面的测试全部失败:
Ubuntu、Solaris、AIX、FreeBSD
论坛跳转: