【问题标题】:Open and run commands on cmd from PowerShell从 PowerShell 在 cmd 上打开并运行命令
【发布时间】:2016-11-12 13:11:13
【问题描述】:

类似的问题在 SO 上被问了好几次,通常答案是:

  • 在 PowerShell 上运行相同的命令,因为它也在那里
  • 运行cmd,然后运行命令
  • 调用cmd传递/c

以及我已经尝试过的其他一些事情。但我的问题是:我有一个拒绝在 PowerShell 上运行的特定程序 (cntkpy34.bat)。也就是说,使用上述任何解决方案,我仍然会收到“请从常规 Windows 命令提示符内执行此脚本。”

所以我真正想要的是调用一个新的cmd.exe 窗口并在其上运行命令。这如何在 PowerShell 脚本中实现?

编辑:检查批处理文件,这是它验证外壳的方式:

if /I "%CMDCMDLINE%" neq ""%COMSPEC%" " (
    echo.
    echo Please execute this script from inside a regular Windows command prompt.
    echo.
    exit /b 0
)

即使启动一个新的cmd.exe 进程也不行。

【问题讨论】:

  • 然后从cntkpy34.bat 文件中删除验证shell 的部分。如果您无法编辑该文件,则只需使用该 PowerShell 命令满足该条件:$env:CMDCMDLINE=$env:COMSPEC
  • 是的,我建议这样做;)
  • @PetSerAl 这些都没有在 PS 上设置(它们指向 cmd.exe 没有参数),我不确定这是否安全,因为它必须激活 Anaconda 环境。反正我会试试的。

标签: powershell batch-file cmd


【解决方案1】:

Start-Process cmd -Argument "/c cntkpy34.bat" -RedirectStandardOutput somefile

这将打开一个新的 cmd 窗口并在那里运行

【讨论】:

  • 太棒了。有没有办法捕获输出?
  • 呃,捕获的输出仍然显示Please execute this script from inside a regular Windows command prompt.。这是一个硬饼干。
  • 这没有意义,这是要执行的:C:\>if /I ""C:\Windows\system32\cmd.exe" /c 1.bat " NEQ ""C:\Windows\system32\cmd.exe" "
  • 这并没有解决我的问题,但它是我问题的答案,所以无论如何我都会接受它。
  • 好吧,我很抱歉,但您可以调整原始 bat 文件以包含您的 powershell 脚本调用命令,就像 PetSerAI 说的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2018-03-14
  • 1970-01-01
  • 2021-09-13
  • 2014-09-16
  • 1970-01-01
  • 2018-04-11
相关资源
最近更新 更多