【问题标题】:Execute a bat file on keypress in VsCode在 VsCode 中的按键上执行 bat 文件
【发布时间】:2021-10-27 08:36:04
【问题描述】:

我正在为 vulkan 编写着色器,必须将其编译成 spir-v。我有一个非常好的批处理文件,它将使用 GLSlangvalidator 为我构建我的着色器。我试图让一个按键在 VsCode 中运行我的批处理文件,这样我就可以检查我的代码是否有错误,以便构建它。我有以下内容:

    {
    "key": "f5",
    "label": "build",
    "type": "shell",
    "command": "workbench.action.terminal.sendSequence",
    "args" : {"text": ".\\compile.bat"},
    "presentation" : {
        "reveal": "always"
    }

这几乎可行 - 但我仍然必须专注于内置终端面板并按 Enter。当然有一种方法可以执行命令,而不仅仅是输入字符串? 谢谢!

【问题讨论】:

  • 您的问题是,我如何运行一个批处理文件,其cmd.exe 窗口最顶部?,焦点?或两者?这个网站的想法是我们帮助您解决您编写的代码的问题。您发布的代码并没有真正表现出问题,问题是您没有尝试对其进行编码。我建议您搜索参考资料和/或在更合适的平台上提问,也许是Super User
  • 我的问题是让 Visual Studio Code 按命令运行批处理文件。我上面的代码成功地将所需的命令添加到内置终端,但没有执行。如果您不熟悉 VSc,则有一个内置终端,它作为 cmd 窗口运行,您可以在其上执行各种任务,其中大部分您可以使用上述脚本进行编程(我相信它是在 json 中)
  • TBF,内置终端根据配置设置运行许多 shell 中的任何一个。例如"C:\Windows\System32\cmd.exe""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe""C:\Program Files\Git\bin\bash.exe""C:\Windows\System32\bash.exe"。我假设运行该终端并与之交互的能力也是一个配置选项,因此您的问题可能与软件设置有关,而不是与编程本身有关。
  • 从已经发布的答案中可以看出,并在我之前的评论中暗示,问题在于 JSON 文件中的配置设置,而不是编程问题。因此,您的问题不在 StackOverflow 上。

标签: batch-file visual-studio-code glsl vulkan


【解决方案1】:
{
  "key": "alt+5",
  // "label": "build",               // no effect in a keybinding
  // "type": "shell",                // no effect in a keybinding
  "command": "workbench.action.terminal.sendSequence",
  "args": {
    "text": ".//test.bat\u000D"
  // },
  // "presentation": {              // no effect in a keybinding
    // "reveal": "always"
  // },
},

我注释掉的那些键和值在此键绑定中无效。他们将进入一项任务。如果这些对您很重要,那么您应该使用另一个答案中的任务方法。如果您想要对presentation 做的只是确保终端打开,您可以将sendSequence 调用与terminal.focus 组合在一个宏键绑定中,例如:

{
  "key": "alt+3",
  "command": "extension.multiCommand.execute",
  "args": {
    "sequence": [
      "terminal.focus",
      {
        "command": "workbench.action.terminal.sendSequence",
        "args": {
          "text": ".//test.bat\u000D"
        }
      }
    ]
  },
}

否则,您将非常接近初始键绑定。只需使用 unicode 字符\u000D 在发送到终端的文本末尾添加回车即可立即运行。

因此,如果您在触发键绑定之前或之后手动打开终端,这就足够了:

  {
    "key": "alt+5",
    "command": "workbench.action.terminal.sendSequence",
    "args": {
      "text": ".//test.bat\u000D"   // these path separators work for me on Windows
    }
  }

【讨论】:

    【解决方案2】:

    tasks.json 中,创建一个任务来运行.bat。像这样的:

    {
        "label": "MY_TASK",
        "type": "shell",
        "command": "MY_BAT_FILE.bat",
        "presentation": {"echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true},
        "group": {"kind": "build", "isDefault": true},
    },
    

    然后,使用Tasks: Run Build Task 热键(默认为CtrlShiftB)。


    你可以有不止一项这样的任务。

    最多一个任务可以有"isDefault": trueCtrlShiftB应该运行的那个。

    您可以通过将以下内容添加到您的keybindings.json 来为这些任务分配自定义热键:

    {"key": "f5", "command": "workbench.action.tasks.runTask", "args": "MY_TASK"},
    //       ^~ key                                                     ^~~~~~~ task name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多