0

此命令位于一个大型批处理文件的中间,该文件在 Windows XP 下运行了 5 年以上,但在 Windows 7(32 位)下运行时,它报告“MyBatch.bat 未被识别为内部/外部命令, 可运行的程序或批处理文件”。

如果我编辑主批处理文件以在“cd”或“dir”行之前显示 MyBatch.bat 存在的目录,但 cmd 找不到它。

我发现使调用起作用的唯一方法是在该行之前加上“set path=%path%;%cd%”,但这仅适用于 MyBatch.bat 的位置现在位于路径中。对于主批处理文件的其余部分,这是一个不切实际的解决方案。我不能使用 'call MyBatch.bat ...' 代替,因为在其他地方 cmd /C 用于调用 .exe 文件。

在我的系统上,注册表中的“cmd”设置为管理员模式,并启用了命令扩展(主批处理文件的某些处理需要管理员模式)。我也尝试过将 cmd 设置为 WINXPSP3 兼容模式,但没有任何区别。

就好像 Win7 版本的 cmd 只使用 %path% 来查找东西,而不是查看它正在运行的目录,而 WinXP 版本则可以。我还没有在任何地方看到这种限制。

我是否误解了某些内容或错过了步骤或注册表标志?有没有办法让 cmd 在 Win7 下像在 WinXP 下一样工作?

4

3 回答 3

1

如果MyBatch.bat与调用它的脚本位于同一目录中,您可以随时执行以下操作:

call "%~dp0MyBatch.bat" ...
于 2013-05-15T22:24:14.223 回答
0

感谢 AnsgarWiechers 关于 %~dp0 的提示。我将 'cmd /C "Echo %~DP0"' 添加到批处理文件中,以查看认为它正在运行的目录 'cmd' 。这给了我解决问题所需的线索。

我会在注册表中为 cmd.exe 设置一个“AutoRun”目录。我没有意识到这会在调用“cmd”时生效,即使是在批处理文件中,而不是像我想要的那样仅在我打开 cmd 窗口时生效。

我已经删除了 Autorun 条目,它现在工作正常。

感谢大家的有益建议。

于 2013-05-16T13:00:45.580 回答
0

我相信您需要检查cmd /?文档,特别是如果未/d指定开关会发生什么 - 有一些注册表项可以控制CMD启动时发生的事情,这可能是您问题的根本原因。

我目前无法在我的机器上验证 - 我没有遇到此类问题,但提到的注册表项也丢失了......

于 2013-05-16T01:39:02.317 回答