Безопасно ли писать пакетные файлы с окончаниями строк Unix?


15

Я думаю, что наткнулся на ошибку в командном файле, потому что он был написан с окончанием строки Unix. Это известная проблема с cmd.exe запускать командные файлы в Windows?


1
У меня никогда не было проблем, и я всегда использую конец строки Unix. Но это не значит, что нет такой проблемы, которую мне просто повезло пропустить.
Зоредаче

2
С какой ошибкой вы столкнулись? Команды не запускаются? Или просто, чтобы при открытии файла с помощью блокнота это выглядело так, как будто нет конца строки?
Hennes

Ответы:


11

Это на самом деле не "ошибка" ... так как это дизайн. Новые строки Windows определяются как "\ r \ n" ... или комбинация "Возврат каретки" и "Новая строка" ... тогда как разновидности * nix предпочитают опускать возврат каретки. Вы всегда должны использовать «\ r \ n» в любом месте Windows, где это возможно. Все остальное может быть неверно истолковано ... и привести к неожиданным результатам.


Я столкнулся с проблемой, когда call: label не переходил на метку, но тот же вызов позже в файле действительно переходил на метку. Файл, о котором идет речь, использовал конец строки \ n. Я переключился на \ r \ n окончания строк для всех командных файлов в моем проекте, и проблема исчезла. Я не перепроверял \ n окончания, чтобы убедиться, что это не был случайный случай (выполнение сценариев занимает почти час).
Самуил

2
Блокнот не может обрабатывать окончания строк Unix, но WordPad может, PowerShell может, и многие другие могут.
Майкл Хэмптон

Кэм, вы приводите еще несколько примеров, когда .bat файлы не работают правильно с окончаниями строки nix?
Михал Кордас

@MichalKordas Не проходить и тестировать каждую версию каждой ОС Microsoft и * nix дистрибутива, это своего рода сложный приказ. Это действительно не место для подробного обсуждения этого вопроса. Лучшие практики таковы, что Windows использует \ r \ n, * nix использует \ n, а иногда mac использует только \ r. Поскольку только Windows использует пакетные файлы, лучше предположить, что вы должны использовать \ r \ n.
TheCompWiz

4

Это кажется , что пакетные метки пропускаются при LF(Unix строки окончание) используется в .batфайле.


3

Для пакетных файлов нет никакой разницы между окончаниями строк Unix и окончаниями строк Windows.

goto, callИли даже создание переменных перевода строки работает с обоими стилями.

А так как пакетный парсер удаляет возврат каретки сразу после фазы расширения процента, они никогда не будут играть большую роль.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.