从PowerShell中打开和运行cmd命令

5

在SO上已经有多次类似的问题,通常的答案是:

  • 在PowerShell中运行相同的命令,因为它也存在
  • 运行cmd,然后再运行命令
  • 传递/c来调用cmd

还有一些其他方法,我已经尝试过了。但我的问题是:我有一个特定的程序(cntkpy34.bat),它拒绝在PowerShell上运行。也就是说,无论使用以上哪种解决方案,我仍会得到“请在常规Windows命令提示符内执行此脚本”的提示。

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

编辑:检查批处理文件,它是这样验证shell的:

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

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


4
只需从 cntkpy34.bat 文件中删除验证 shell 的部分即可。如果您无法编辑该文件,则可以使用以下 PowerShell 命令满足该条件:$env:CMDCMDLINE=$env:COMSPEC - user4003407
是的,我建议就这样做 ;) - 4c74356b41
@PetSerAl 这些都没有在 PS 上设置(它们指向没有参数的 cmd.exe),而且我不确定这是否安全,因为它必须激活 Anaconda 环境。无论如何,我会尝试一下。 - villasv
1个回答

10

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

这将会打开一个新的命令提示符窗口,并在其中运行该命令。


太棒了。有没有一种方法可以捕获输出? - villasv
哎呀,捕获的输出仍然显示“请在常规的Windows命令提示符中执行此脚本。” 这是一个难题。 - villasv
这段程序相关的内容翻译成中文如下:这没有意义,这是正在执行的内容:“C:>if /I ""C:\Windows\system32\cmd.exe" /c 1.bat " NEQ ""C:\Windows\system32\cmd.exe" "”。 - 4c74356b41
那并没有解决我的问题,但它是我问题的答案,所以我仍然会接受它。 - villasv
1
很抱歉,但你可以调整原始的批处理文件,将你的PowerShell脚本调用命令包含进去,就像PetSerAI说的那样。 - 4c74356b41

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