cmd / C“MyBatch.bat Param1 Param2 Param3”在WinXP下运行但在Win7下失败

时间:2013-05-15 22:09:59

标签: windows-7 path cmd windows-xp cd

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

如果我将主批处理文件编辑到行前面的'cd'或'dir',它会显示MyBatch.bat所在的目录,但是cmd找不到它。

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

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

就好像wind版本的cmd只使用%path%来查找内容而不是查看它正在运行的目录,而WinXP版本则是这样。我没有看到任何地方表达过这种限制。

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

3 个答案:

答案 0 :(得分:1)

如果MyBatch.bat与调用它的脚本位于同一目录中,则可以始终执行此操作:

call "%~dp0MyBatch.bat" ...

答案 1 :(得分:0)

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

我目前无法在我的机器上验证 - 我没有遇到过这样的问题,但提到的注册表项也不见了......

答案 2 :(得分:0)

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

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

我删除了自动运行条目,现在工作正常。

感谢各位提供的有益建议。