Вот простой файл unix2dos.bat, который сохраняет пустые строки и восклицательные знаки:
@echo off
setlocal DisableDelayedExpansion
for /f "tokens=1,* delims=:" %%k in ('findstr /n "^" %1') do echo.%%l
Вывод будет стандартным, поэтому при желании перенаправьте вывод unix2dos.bat в файл.
Он позволяет избежать ошибок других ранее предложенных решений для / f пакетного цикла:
1) Работает с отключением отложенного раскрытия, чтобы избежать съедания восклицательных знаков.
2) Использование самого токенизатора for / f для удаления строки число из findstr /n
строк вывода.
(Использование findstr / n необходимо также для получения пустых строк: они будут отброшены, если для / f читать непосредственно из входного файла.)
Но, как отметил Джеб в комментарии ниже, вышеуказанное решение имеет один недостаток, которого нет у других: оно отбрасывает двоеточия в начале строк.
Итак, обновление 2020-04-06 просто для удовольствия, вот еще один однострочный файл на основе findstr.exe, который, похоже, отлично работает без указанных выше недостатков:
@echo off
setlocal DisableDelayedExpansion
for /f "tokens=* delims=0123456789" %%l in ('findstr /n "^" %1') do echo%%l
Дополнительные приемы:
3) Используйте цифры 0–9 в качестве разделителей, чтобы tokens=*
пропускал начальный номер строки.
4) Используйте двоеточие, вставленное через findstr /n
после номера строки, в качестве разделителя токенов после эхо-команда.
Я оставлю это Джебу, чтобы он объяснил, есть ли крайние случаи, когда echo:something
может выйти из строя :-)
Все, что я могу сказать, это то, что эта последняя версия успешно восстановила окончания строк на моем огромном batch library, поэтому исключения, если таковые имеются, должны быть довольно редкими!
person
Jean-François Larvoire
schedule
23.01.2020