用Unix行尾写批处理文件安全吗?


15

我认为我在批处理文件中遇到了一个错误,因为它是用unix行结尾编写的。这是cmd.exe在Windows中运行批处理文件的已知问题吗?


1
我从来没有遇到过问题,并且我总是使用unix行尾。但这并不意味着我没有幸运地错过了一些问题。
Zoredache

2
您遇到了哪个错误?命令无法启动?还是只是用记事本打开文件时看起来好像没有行尾?
Hennes 2012年

Answers:


11

这确实不是一个“ bug”……而是设计使然。Windows换行定义为“ \ r \ n” ...或“回车”和“新行”的组合...而* nix风格则更倾向于省略回车。在任何可能的Windows操作系统中,都应始终使用“ \ r \ n”。其他任何事情都可能会被错误解释……并导致大量意想不到的结果。


我遇到了一个问题:call:label没有跳转到标签,但是文件后来的相同调用确实跳到了标签。有问题的文件使用\ n行尾。我将项目中所有批处理文件的行尾都切换为\ r \ n行,问题消失了。我没有对\ n结尾进行重新测试,以确认这不仅仅是一次fl幸(脚本运行将近一个小时)。
塞缪尔

2
记事本不能处理Unix行尾,但是WordPad,PowerShell可以,许多其他事情也可以。
迈克尔·汉普顿

Cam为您提供了更多示例,当.bat文件不能与nix行尾一起正常使用时?
Michal Kordas

@MichalKordas如果不通过并测试每个Microsoft OS和* nix发行版的每个版本,这是一个艰巨的任务。确实不是在此进行详细讨论的地方。最佳做法是Windows使用\ r \ n,* nix使用\ n,有时mac仅使用\ r。由于只有Windows使用批处理文件,因此最好假定您应该使用\ r \ n。
TheCompWiz


3

对于批处理文件,unix行尾和Windows行尾之间似乎没有区别。

gotocall甚至创建换行变量都可以同时使用两种样式。

而且,由于批处理解析器在百分比扩展阶段之后直接删除了回车符,因此它们将永远不会发挥重要作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.