6

我们有一个名为的 shell 脚本文件LineFeed.sh,它执行将 Linefeed( LF) 转换为 Carriage Return + LineFeed 的功能。我们希望通过 windows 中的批处理文件来完成相同的操作。可能吗?

Linux 外壳文件

E_WRONGARGS=65
cat OutputList|while read -r Line 
do 
if [ -z "$Line" ]
then
echo "Usage: `basename $0` filename-to-convert"
exit $E_WRONGARGS
fi
NEWFILENAME=$Line.unx
CR='\015'  # Carriage return.
       # 015 is octal ASCII code for CR.
       # Lines in a DOS text file end in CR-LF.
       # Lines in a UNIX text file end in LF only.
tr -d $CR < $1 > $NEWFILENAME // here its deleting CR but i need to append LF
# Delete CR's and write to new file.
done
echo "Original DOS text file is \"$1\"."
echo "Converted UNIX text file is \"$NEWFILENAME\"."
exit 0
4

2 回答 2

13

您可以在此 Wikipedia 页面上找到一种方法:

TYPE unix_file | FIND "" /V > dos_file

请记住,您不能将输出重定向到您正在读取的同一文件。这几乎适用于所有系统和 shell,因此需要进行额外的重命名。

这里的关键是type知道如何读取 LF 行结尾,find然后将它们转换为 CRLF。type单独不会对输出做任何事情(它应该这样做,因为有一个简单地转储文件内容的命令是不好的:-))。

于 2010-06-24T18:19:53.100 回答
0

基于使用type命令执行此操作的一般注意方式,您还可以使用以下命令转换所有文件(或您可能喜欢的任何通配符)并将它们转储到临时文件夹中:

md temp
for %a in (*.*) do type "%a" | find /v "" > temp\"%a"

如果一般的想法是替换原件,那么您只需将文件移出临时位置并删除临时文件夹

于 2018-07-18T05:04:15.547 回答