Чи безпечно писати пакетні файли з закінченнями рядків Unix?


15

Я думаю, що я наткнувся на помилку в пакетному файлі, оскільки він був написаний з кінцями рядка Unix. Це відома проблема із cmd.exe, що працює у пакетних файлах Windows?


1
У мене ніколи не було проблем, і я завжди використовую закінчення ліній Unix. Але це не означає, що не існує якоїсь проблеми, яку мені просто пощастило пропустити.
Zoredache

2
У яку помилку ви зіткнулися? Не вдалося запустити команди? Або просто так виглядало так, ніби немає рядкових закінчень, коли ви відкриваєте файл із блокнотом?
Hennes

Відповіді:


11

Це насправді не "помилка" ... як це побічна конструкція. Нові рядки Windows визначаються як "\ r \ n" ... або комбінація "Повернення перевезення" та "Нова лінія" ... тоді як аромати * nix вважають за краще опускати повернення каретки. Ви завжди повинні використовувати "\ r \ n" у будь-якому випадку в Windows, де це можливо. Все інше може трактуватися неправильно ... і спричинити багато несподіваних результатів.


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

2
Блокнот не може обробляти закінчення рядків Unix, але WordPad може, PowerShell може, і багато інших речей.
Майкл Хемптон

Cam ви надаєте ще кілька прикладів, коли .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.