如何通过新的Windows终端运行批处理文件?

32
我经常同时运行多个批处理文件,因此通常打开很多cmd提示符,所以我认为新的Windows终端会是一个整理标签的好方法。
问题是,我无法弄清如何更改默认行为,使得批处理文件通过 Windows 终端实例内的 cmd 实例运行。
我可以轻松地打开 Windows 终端,启动一个 cmd 实例,进入正确的目录并运行批处理文件…但是这需要很多努力。我想只需运行批处理文件,就可以通过 Windows 终端内的 cmd 提示符运行它。

这个功能可能还没有推出,我建议你联系当前的开发人员询问是否可用。如果不可用,你可以为他们记录一个增强问题,以确保该新软件的可用性进一步提高! - Zach Pedigo
从 https://github.com/microsoft/terminal 引用:与(Windows 终端)团队沟通的最简单方法是通过 GitHub 问题。 - user6811411
我不确定我是否正确,我的英语知识非常有限,但这个链接有帮助吗?https://www.dostips.com/forum/viewtopic.php?f=3&t=9136 - elzooilogico
1
@elzooilogico - 那个链接只是两个人讨论终端,没有讨论如何使用它。 - SomethingDark
1
我还没有测试过它,但我想你要么改变与.bat扩展名相关联的可执行文件,要么使用start命令。 - SomethingDark
ConEmu及其分支Cmder支持不仅.bat,还有.cmd。 - userA789
7个回答

49

HKEY_CLASSES_ROOT\batfile\shell\open\command 的默认值改为以下内容,即可在双击时获得此行为:

"%1" %*

致:

"C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\wt.exe" -p "Command Prompt" "%1" %*

或者使用ftype命令:

ftype batfile="C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\wt.exe" -p "Command Prompt" "%1" %*

你需要将<user>替换为当前用户名目录,并且这个wt.exe路径(C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\)是基于你是否从Microsoft Store安装了Windows终端,如果没有,则需要找到wt.exe的路径并使用它。Windows环境变量%LOCALAPPDATA%%USERPROFILE%对我不起作用,所以我在这里使用了完整路径。

你可以创建一个注册表项,使得可以使用Windows终端打开BAT文件并使用CMD运行:

  1. 打开regedit并导航到HKEY_CLASSES_ROOT\batfile\shell键。
  2. 创建一个名为wtopen的键,其默认值为Open with Windows Terminal

RegEdit batfile shell commands

  1. 创建子键HKEY_CLASSES_ROOT\batfile\shell\wtopen\command,其默认值为:
"C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\wt.exe" -p "Command Prompt" "%1" %*

现在,当您右键单击BAT文件并单击它时,将会出现一个新条目"Open with Windows Terminal",它将打开一个带有选定批处理文件的Command Prompt面板的新Windows Terminal

Windows explorer BAT file right click

已使用Windows Terminal 0.11.1121.0进行测试

Command Prompt (cmd)配置文件的默认名称为"Command Prompt"。如果您有默认值以外的其他名称,则必须使用-p "<name>"参数进行更改。


1
更一般的写法是 "%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe"。虽然没有尝试过,但应该可以通过命令提示符更改默认设置,具体方法为 ftype batfile="%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" %1 %* - Stephan
@Stephan 我尝试过%LOCALAPPDATA%%USERPROFILE%\AppData\...但它们不起作用,但是使用ftype是更快的设置方式,是的。 - Christos Lytras
1
这个方法是有效的,但问题在于是否有一种方法可以通过双击来默认在Windows终端中打开bat文件,而不是右键单击选项。 - Nico Nekoru
1
@NekoMusume 是的,我在回答开头就涵盖了这个问题;更改 HKCR\batfile\shell\open\command 对你没有起作用吗? - Christos Lytras
1
很遗憾,对我来说它没有起作用,只有右键可以使用。 - Nico Nekoru
显示剩余8条评论

14

其他回答可行,但我也想让批处理文件在Windows终端已经打开的情况下作为新标签页打开,并允许没有绝对路径的脚本:

打开注册表编辑器并导航到此键:

Computer\HKEY_CLASSES_ROOT\batfile\shell\open\command

然后将(Default)的值修改为以下内容:

wt.exe -w 0 new-tab -d . "%1" %*

-w 0 参数指定在当前文件的工作目录下的一个 new-tab 中打开第一个或现有窗口: -d .

提示:如果您设置了批处理文件静默运行,不想让其弹出,请将其从 .bat 改为 .cmd


1
有没有办法在批处理文件完成后保持选项卡/窗口打开? - pezcode
1
只需在批处理文件的末尾添加一行命令pause。当它到达该点时,它将停止并提示您按任意键退出,直到您这样做为止,保持其打开状态。 - tech189
ftype batfile="%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" -w 0 new-tab -d . -p "Command Prompt" "%1" %*。无需打开注册表编辑器。 - ZR Han

8
我已经寻找这个解决方案至少一年了,今天终于找到了一个解决方法... 在 Microsoft 论坛 上,一位顾问表示:

.Bat 扩展名是命令提示符可执行格式。 它不支持新的 Windows 终端,我已经检查过了。

幸运的是,这是错误的,我找到了一种方法将新的 Windows 终端设置为默认:

只需创建一个 .reg 文件,并使用以下代码(将 "Marco" 替换为您的用户名)运行它:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@="\"C:\\Users\\Marco\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\" \"%1\""

您还需要编辑 Windows 终端的 settings.json 文件,并将默认设置更改为:

"startingDirectory": "%USERPROFILE%"

to

"startingDirectory": "."

如果您不这样做,它将无法工作,因为它尝试在用户文件夹而不是当前文件夹中运行它!


3
这个功能非常好用,尽管我不得不将起始目录部分放在设置文件(settings.json)中的命令提示符(profile part)下面,才能改变它的目录。 - Matthew Vandenberg
@Mathew Vandenberg 这条评论应该是答案的一部分。 - Raiden Core

6

根据tech189的说法,

其他回答也可以解决问题,但我希望批处理文件在Windows终端已经打开的情况下以新标签页的形式打开,并且允许使用没有绝对路径的脚本。

而且,如果“命令提示符”不是Windows终端的默认配置文件,则我希望.bat文件在Windows终端中使用“命令提示符”配置文件来打开。

因此,结合Christos Lytras和tech189的解决方案,我找到了适合我的解决方案:

打开注册表编辑器并导航到以下键:

计算机\HKEY_CLASSES_ROOT\batfile\shell\open\command

然后将(Default)值修改为以下内容:

wt.exe -w 0 new-tab -d . -p "Command Prompt" "%1" %*

6
今天我发现以下命令可以正常工作(无需更改注册表):
wt -p "Command Prompt" {pathtoyourbatchfile1} ; nt {pathtoyourbatchfile2}

上述命令将使用指定的批处理文件打开 2 个选项卡。 "nt" 部分定义了额外的选项卡,因此您可以重复它来初始化多个选项卡。

1
非常感谢。让我请你吃晚饭。 - Aakash Verma
“-p”标志是什么意思?我运行了“wt.exe --help”,但没有看到它的说明。 - Eboubaker
确实,该帮助页面并未列出所有内容。"-p"标志指定要运行的程序及其"选项卡"标题。请参阅此处以获取更多信息和示例:https://github.com/microsoft/terminal/blob/main/doc/specs/%23607%20-%20Commandline%20Arguments%20for%20the%20Windows%20Terminal.md - Allie
以上代码在哪里使用?你是将其作为快捷方式的目标吗? - Hannes Ziegler
你可以将命令放在一个名为“domyaction.cmd”的文件中,然后通过使用快捷方式运行它。 - Allie

1

0

对于最佳方法,如果我们需要将系统环境添加到路径中,则需要将 REG_TYPE 从 REG_SZ 更改为 REG_EXPAND_SZ,否则我们只能使用绝对路径

%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe -w 0 nt -d . "%1" %* 路径位于 HKEY_CLASSES_ROOT\batfile\shell\open\command 下方如下:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
  00,54,00,41,00,25,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,\
  74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,41,00,70,00,70,00,73,\
  00,5c,00,77,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,77,00,20,00,30,00,\
  20,00,6e,00,74,00,20,00,2d,00,64,00,20,00,2e,00,20,00,22,00,25,00,31,00,22,\
  00,20,00,25,00,2a,00,00,00

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