пакетный файл + конвертировать LF в CR + LF - PullRequest
5 голосов
/ 24 июня 2010

У нас есть файл сценария оболочки с именем LineFeed.sh, который выполняет функцию преобразования перевода строки (LF) в возврат каретки + 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

Ответы [ 2 ]

13 голосов
/ 24 июня 2010

Вы можете найти один способ на этой странице Википедии :

TYPE unix_file | FIND "" /V > dos_file

Помните, что вы не можете перенаправить вывод в тот же файл, из которого читаете. Это относится практически ко всем системам и оболочкам, поэтому необходимо дополнительное переименование.

Ключевым моментом здесь является то, что type знает, как читать окончания строк LF, и find затем преобразует их в CRLF. type сам по себе ничего не сделает с выводом (он должен это делать, потому что наличие команды, которая просто сбрасывает содержимое файла, связанное с ними, нехорошо: -)).

0 голосов
/ 18 июля 2018

Основываясь на общепринятом способе сделать это с помощью команды type, вы также можете преобразовать все файлы (или любой другой подстановочный знак, который вы предпочитаете) и выбросить их во временную папку, используя следующее:

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

Если основной идеей было заменить оригиналы, то вы можете просто переместить файлы обратно из временного расположения и удалить временную папку

...