批处理文件的第一行出错 - 未被识别为内部或外部命令、可执行程序或批处理文件。

9
在Windows 7中的VS2012上,我设置了一个外部工具来调用一个批处理文件(我们将其称为BatA.bat)。在外部工具中,我将$(ItemDir)作为唯一的参数传递,并将初始目录设置为$(ItemDir)。
在BatA.bat内部,通过以下方式调用BatB.bat:
call "%1BatB.bat"

这个调用BatB.bat命令会在输出窗口中产生以下结果: 'rem'不是内部或外部命令,也不是可运行的程序或批处理文件。 你好 BatB.bat的代码如下:
rem ***Bat B***
@echo off
echo.
echo hello

奇怪的是,尽管出现了错误消息,但BatB.bat确实在运行并完美执行!

我只是想不通为什么首次调用BatB.bat时会收到错误消息...

BatA.bat和BatB.bat都在同一个目录中。我已经尝试将路径硬编码到调用BatB.bat中,以及在调用BatB.bat之前进行cd到批处理文件目录,但我仍然收到相同的错误。


兄弟...我在Visual Studio中创建了一个文本文件(BatB.txt),然后在解决方案资源管理器中将其重命名为BatB.bat。它先是一个txt文件,然后变成了bat文件,这就导致了上述错误(我能够复制这种行为)。如果我最初创建并将其命名为BatB.bat的bat文件-问题解决了。因此,总结一下...如果将.txt文件转换为.bat文件,则批处理文件的第一行将失败,但所有后续行将执行。 - Scott Software
2
这是因为它保存了一个字节顺序标记(BOM)来识别编码。在编辑文件时,请使用文件菜单的高级保存选项,并选择“西欧(Windows)-代码页1252”,然后保存。(这是在Win7上打开现有批处理文件时VS给我的默认代码页。) - Ken White
可能是Visual Studio在批处理文件中插入无效字符的重复问题。 - phuclv
1个回答

22
最简单的解决方法是在Notepad++中打开文件,在“编码”选项卡下,确保使用没有BOM结尾的编码方式。
正是BOM导致了“'rem'不被识别为内部或外部命令......”的错误。

2
我也遇到过这个问题。Visual Studio 2012 喜欢使用 UTF-8 编码来编写所有代码文件,所以如果你需要编辑 Visual Studio 解决方案中的批处理文件,你可能需要使用 Power Tools 扩展提供的“在文件资源管理器中打开文件夹”命令,并使用 Notepad++ 来进行所有批处理文件的工作。 - user490598

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接