使用 Unix 行尾编写批处理文件是否安全?

使用 Unix 行尾编写批处理文件是否安全?

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

答案1

这实际上不是一个“错误”……因为它是设计使然。Windows 换行符定义为“\r\n”……或“回车符”和“换行符”的组合……而 *nix 版本则倾向于省略回车符。在 Windows 中,您应该尽可能使用“\r\n”。其他任何内容都可能被错误解释……并导致大量意外结果。

答案2

似乎那批标签LF当文件中使用 (Unix 行结束)时将被跳过.bat

答案3

对于批处理文件,unix 行尾和 windows 行尾之间没有太大区别。

目前,在搜索标签时,GOTO 和 CALL 的行为只存在一个已知故障。如果标签位于相对于当前文件位置的 512 字节边界上,则标签解析器无法找到标签。不同之处在于,因为回车符用于内部线路重置。请参阅当批处理文件具有 Unix 行结尾时,Call 和 goto 可能会失败

尽管使用了标签扫描器,但意外地发现了更多问题,因为批处理解析器在百分比扩展阶段之后直接删除了所有回车符。

示例显示问题:

@echo off

goto :main

:func
echo ************************************************
echo ************************************************
echo ************************************************
echo ************************************************
echo ************************************************
echo ***********************************************
echo ***********************************************
echo ***********************************************
echo ************************************************
echo never go back to :main
echo This is the end of :func
exit /b

:main
:main
echo This is main
goto :func
exit /b

输出为

这是 :func 的结尾

答案4

答案是:您可能会“幸运”地使用 LF,但不要指望它。我们遇到了与原始请求者相同的问题。我们的流程最终会得到只有 LF 的 bat 文件,并且(抱歉找不到模式)有时会显示“未找到”标签,尽管它显然在那里。必须转换为 CR-LF,或进行随机更改,直到它起作用!

相关内容