【问题标题】:cmd /C "MyBatch.bat Param1 Param2 Param3" works under WinXP but fails under Win7cmd /C "MyBatch.bat Param1 Param2 Param3" 在 WinXP 下工作,但在 Win7 下失败
【发布时间】:2013-05-10 15:52:26
【问题描述】:

此命令位于一个大型批处理文件的中间,该批处理文件在 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 下一样工作?

【问题讨论】:

  • 您可能是对的,但您应该提供真实数据,而不是"MyBatch.bat Param1 Param2 Param3"
  • 实际使用的文件夹是什么? Win 7 和 Win 8 中的管理员具有比 Win XP 中的管理员更少的访问权限。尝试右键单击批处理文件并“以管理员身份运行”。看看是否成功。
  • @Endoro - 感谢您的回复。我不认为添加真正的参数会有所帮助,因为它们只会对处理它们的批处理文件有意义,但完整的行是: cmd /C "MkPCBld.bat Release Nowait NoDemo"
  • @foxidrive - 打开 Admin cmd 提示符并导航到批处理文件所在的目录并运行:'MkPCBld.bat Release NoWait NoDemo' 工作正常。这就是令人讨厌的地方。
  • @Falstaff:这表明这是一个权限问题。

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


【解决方案1】:

如果MyBatch.bat 与调用它的脚本位于同一目录中,您始终可以这样做:

call "%~dp0MyBatch.bat" ...

【讨论】:

  • 也可用:.\MyBatch.bat.
  • 没有。 . 是工作目录,可能与脚本所在的目录不同。 %CD% 也是如此。
  • @Ansgar - 谢谢你。看起来它可能会起作用。到调用时,我们已经在批处理文件调用中深入了 3 层,但最外层与 MyBatch 位于同一目录中。我会尝试并回复你。
  • @michaelb958:谢谢。我已经尝试过这个和许多其他的东西 [B-)] 包括 'cmd /c "c:\\MyBatch.bat ..."' 这工作但不切实际,因为每个开发分支的路径都不同和/或开发者的 PC。
  • 只是想一想,源文件和构建实用程序的完整路径是 WinXP 中使用的“C:\Sandboxes\...”。当我们使用 Win7 时,它是否应该位于其他位置,例如 'c:\Users\\Documents\Sandboxes\...'?这可能是问题所在?
【解决方案2】:

我认为您需要检查 cmd /? 文档,特别是如果未指定 /d 开关会发生什么 - 有一些注册表项可以控制 CMD 启动中发生的事情,这可能是导致你的问题。

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

【讨论】:

  • 谢谢。我尝试了 /d 选项,但没有效果(在过去的两天里,我几乎尝试了所有方法)。据我所知,'cmd /?'在 WinXP 上给出与在 Win7 上相同的结果。我认为它的行为 supposed 在两者上都是相同的。在 Win7 上运行时,它似乎不查看当前目录,但在 WinXP 上运行。这很令人沮丧。
【解决方案3】:

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

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

我已经删除了自动运行条目,它现在可以正常工作了。

感谢大家提供的有用建议。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2021-11-01
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多